【操作系统之十五】iptables黑白名单、自定义链、网络防火墙、常用动作

摘要:
在上图中,橙色主机是iptables的主机,它充当网络防火墙。浅蓝色圆圈表示受网络防火墙保护的网络区域,圆圈内的蓝色矩形表示网络中的主机。网络防火墙设置启用网络防火墙的转发功能#如果您希望iptables作为网络防火墙,iptables主机将启用核心转发功能来转发消息。

1、黑白名单
当链的默认策略为ACCEPT时,链中的规则对应的动作应该为DROP或者REJECT,表示只有匹配到规则的报文才会被拒绝,没有被规则匹配到的报文都会被默认接受,这就是"黑名单"机制。
当链的默认策略为DROP时,链中的规则对应的动作应该为ACCEPT,表示只有匹配到规则的报文才会被放行,没有被规则匹配到的报文都会被默认拒绝,这就是"白名单"机制。
如果使用白名单机制,我们就要把所有人都当做坏人,只放行好人。如果使用黑名单机制,我们就要把所有人都当成好人,只拒绝坏人。白名单机制似乎更加安全一些,黑名单机制似乎更加灵活一些。

白名单机制设置技巧:默认策略设置为ACCEPT,先将放行规则放在前面,最后插入一条拒绝所有报文的规则。不是将默认策略设置为DROP,否则管理员都登录不进去。
eg:
iptables -P INPUT ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -j REJECT

2、自定义链
自定义一条链,链名叫IN_WEB,我们可以将所有针对80端口的入站规则都写入到这条自定义链中,当以后想要修改针对web服务的入站规则时,就直接修改IN_WEB链中的规则就好了;
同理,可以将针对sshd的出站规则放入到OUT_SSH自定义链中,将针对Nginx的入站规则放入到IN_NGINX自定义链中,这样,我们就能想改哪里改哪里,再也不同担心找不到规则在哪里了。
(1)新建
#新建名字为IN_WEB的自定义链
iptables -t filter -N IN_WEB

(2)引用
让自定义链生效,需要用默认链引用自定义链,-j后面不是动作而是自定义链
eg:
iptables -I INPUT -p tcp --dport 80 -j IN_WEB

(3)修改
#将自定义链IN_WEB名字改为WEB
iptables -E IN_WEB WEB

(4)删除
#删除自定义链WEB
iptables -X IN_WEB WEB
删除自定义链要满足两个条件:
(4.1)自定义链没有被任何默认链引用,即自定义链的引用计数为0,否则报错:Too many links
eg:iptables -D INPUT 1
(4.2)自定义链中没有任何规则,即自定义链为空,否则报错:Directory not empty
eg:iptables -t filter -F WEB

3、网络防火墙
防火墙从逻辑上讲,可以分为主机防火墙与网络防火墙。
主机防火墙:针对于单个主机进行防护,起作用的是INPUT链与OUTPUT链;
网络防火墙: 往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。
网络防火墙的职责就是"过滤并转发",要想"过滤",只能在INPUT、OUTPUT、FORWARD三条链中实现,要想"转发",报文则只会经过FORWARD链(发往本机的报文才会经过INPUT链),所以,iptables的角色变为"网络防火墙"时,规则只能定义在FORWARD链中。

【操作系统之十五】iptables黑白名单、自定义链、网络防火墙、常用动作第1张
上图中,橘黄色主机为iptables所在主机,iptables充当网络防火墙的角色,浅蓝色圆形表示网络防火墙所防护的网络区域,圆形内的蓝色矩形表示网络内的主机。
当外部网络中的主机与网络内部主机通讯时,不管是由外部主机发往内部主机的报文,还是由内部主机发往外部主机的报文,都需要经过iptables所在的主机,由iptables所在的主机进行"过滤并转发",所以,防火墙主机的主要工作就是"过滤并转发"。

网络防火墙设置
(1)开启网络防火墙的转发功能
#如果想要iptables作为网络防火墙,iptables所在主机开启核心转发功能,以便能够转发报文。
#使用如下命令查看当前主机是否已经开启了核心转发,0表示为开启,1表示已开启
cat /proc/sys/net/ipv4/ip_forward
#使用如下两种方法均可临时开启核心转发,立即生效,但是重启网络配置后会失效。
方法一:echo 1 > /proc/sys/net/ipv4/ip_forward
方法二:sysctl -w net.ipv4.ip_forward=1
#使用如下方法开启核心转发功能,重启网络服务后永久生效。
配置/etc/sysctl.conf文件(centos7中配置/usr/lib/sysctl.d/00-system.conf文件),在配置文件中将 net.ipv4.ip_forward设置为1

(2)配置防火墙FORWAED链规则
#示例为允许网络内主机访问网络外主机的web服务与sshd服务。
iptables -A FORWARD -j REJECT
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT
iptables -I FORWARD -d 10.1.0.0/16 -p tcp --sport 80 -j ACCEPT
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -I FORWARD -d 10.1.0.0/16 -p tcp --sport 22 -j ACCEPT
 
#可以使用state扩展模块,对上述规则进行优化,使用如下配置可以省略许多"回应报文放行规则"。
iptables -A FORWARD -j REJECT
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

4、常用动作
4.1 REJECT
使用--reject-with选项,可以设置提示信息,当对方被拒绝时,会提示对方为什么被拒绝。
icmp-net-unreachable
icmp-host-unreachable
icmp-port-unreachable(默认值)
icmp-proto-unreachable
icmp-net-prohibited
icmp-host-pro-hibited
icmp-admin-prohibited

eg:
iptables -I INPUT 2 -j REJECT --reject-with icmp-host-unreachable

4.2 LOG
使用LOG动作,可以将符合条件的报文的相关信息记录到日志中,默认记录到/var/log/messages
修改日志文件:/etc/rsyslog.conf文件(或者/etc/syslog.conf),在rsyslog配置文件中添加如下配置即可,然后重启:
#vim /etc/rsyslog.conf
kern.warning /var/log/iptables.log
#service rsyslog restart

--log-level选项可以指定记录日志的日志级别,可用级别有emerg,alert,crit,error,warning,notice,info,debug。
--log-prefix选项可以给记录到的相关信息添加"标签"之类的信息,以便区分各种记录到的报文信息,方便在分析时进行过滤。
注:--log-prefix对应的值不能超过29个字符。

4.3 SNAT
网络内部的主机可借助SNAT隐藏自己的IP地址,同时还能够共享合法的公网IP,让局域网内的多台主机共享公网IP访问互联网。
eg:
iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 192.168.1.146
将10.1.0.0/16网段的报文的源地址改为公司的公网IP地址。
-t nat表示操作nat表,filter表的功能是过滤,nat表的功能就是地址转换,所以我们需要在nat表中定义nat规则。
-A POSTROUTING表示将SNAT规则添加到POSTROUTING链的末尾,在centos7中,SNAT规则只能存在于POSTROUTING链与INPUT链中,在centos6中,SNAT规则只能存在于POSTROUTING链中。
-j SNAT表示使用SNAT动作,对匹配到的报文进行处理,对匹配到的报文进行源地址转换。
--to-source 192.168.1.146"表示将匹配到的报文的源IP修改为192.168.1.146,"--to-source"就是SNAT动作的常用选项,用于指定SNAT需要将报文的源IP修改为哪个IP地址。

4.4 DNAT
利用DNAT,将公网客户端发送过来的报文的目标地址与端口号做了映射,将访问web服务的报文转发到了内网中的C主机中,将访问远程桌面的报文转发到了内网中的D主机中。
eg:
iptables -t nat -I PREROUTING -d 192.168.1.146 -p tcp --dport 3389 -j DNAT --to-destination 10.1.0.6:3389
-j DNAT --to-destination 10.1.0.6:3389表示将符合条件的报文进行DNAT,也就是目标地址转换,将符合条件的报文的目标地址与目标端口修改为10.1.0.6:3389
--to-destination就是动作DNAT的常用选项。

4.5 MASQUERADE
MASQUERADE理解为动态的、自动化的SNAT.
当拨号网上时,每次分配的IP地址往往不同,不会长期分给我们一个固定的IP地址,如果这时,我们想要让内网主机共享公网IP上网,就会很麻烦,因为每次IP地址发生变化以后,我们都要重新配置SNAT规则,通过MASQUERADE动态的将源地址转换为可用的IP地址,其实与SNAT实现的功能完全一致,都是修改源地址,只不过SNAT需要指明将报文的源地址改为哪个IP,而MASQUERADE则不用指定明确的IP,会动态的将报文的源地址修改为指定网卡上可用的IP地址
eg:
iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eno50332184 -j MASQUERADE

4.6 REDIRECT
使用REDIRECT动作可以在本机上进行端口映射,只能定义在PREROUTING链或者OUTPUT链中。
eg:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
当别的机器访问本机的80端口时,报文会被重定向到本机的8080端口上。

参考:

iptables之网络防火墙 

iptables常用动作

免责声明:文章转载自《【操作系统之十五】iptables黑白名单、自定义链、网络防火墙、常用动作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇第六章 Sleuth--链路追踪博弈论总结(1)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle11g 连接问题

一、TheNetworkAdaptercouldnotestablishtheconnection 状态:失败-测试失败:IO错误:TheNetworkAdaptercouldnotestablishtheconnection 解决: (①、检查防火墙,可能是端口号1521防火墙拦截,把1521加入可允许访问即可。) 这个异常的出现一般与数据库和你的PC...

H5调用手机的相机/摄像/录音等功能 _input:file的capture属性说明

H5使用input标签调用系统默许相机,摄像,录音功能。使用input:file标签, 去调用系统默认相机,摄像,录音功能,其实是有个capture属性,直接说明需要调用什么功能: <input type="file" accept="image/*" capture="camera"> <input type="file" accept...

Firewall防火墙

1.查看当前默认区域 firewall-cmd --get-default-zone 2.查看当前正在活动的区域 firewall-cmd --get-active-zones 3.防火墙规则列表 firewall-cmd --list-all 4.放行端口 firewall-cmd --add-port=8080/tcp --add-port=8...

LwIP协议栈(2):网络接口

  在LwIP中,物理网络硬件接口结构保存在一个全局链表中,它们通过结构体中的 next 指针连接。 struct netif { /// pointer to next in linked list */ struct netif *next; /// IP address configuration in network byte o...

input debounce

项目背景是一个搜索框,不能实时的监听onChange 事件去发送请求,这样会造成服务器的压力 解决思路就是用 setTimeout + clearTimeout 普通js代码如下: / 下面是普通的js实现,可以参考一下 // 获取input元素 var textInput = document.getElementById('test-input');...

关于servu公网访问出现“打开ftp服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:操作超时”的解决方法

最近给公司设置一个ftp服务器(当然是使用serv-u,:))在服务器设置好后,在本机可以访问,无论是使用ip地址(ftp://192.168.1.163),还是域名(例如域名:ftp://www.testftp.com),都正常,可是在公网上怎么访问都是出现“操作超时”的提示,上网也没有查到资料,后来看到一篇文章说是防火墙没有设置,我回过头来检查防火墙的...