概念介绍
主机防火墙:针对单个主机进行防护
网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护。服务于防火墙背后的本地局域网。
当外部网络的主机与内部网络的主机通信时,不管是由外部主机发往内部主机的报文,还是由内部主机发往外部主机的报文,都需要经过iptables所在的主机,由iptables所在的主机进行“过滤并转发”。防火墙主机主要的工作就是“过滤并转发”。
前面的举例中,iptables都是作为”主机防火墙”的角色出现的,所以只用到了INPUT链与OUTPUT链,因为拥有”过滤功能”的链只有3条,INPUT、OUTPUT、FORWARD,当报文发往本机时,如果想要过滤,只能在INPUT链与OUTPUT链中实现。而此时,iptables的角色发生了转变,想要将iptables所在的主机打造成”网络防火墙”,职责就是”过滤并转发”,要想”过滤”,只能在INPUT、OUTPUT、FORWARD三条链中实现,要想”转发”,报文则只会经过FORWARD链(发往本机的报文才会经过INPUT链)。综上所述,iptables的角色变为”网络防火墙”时,规则只能定义在FORWARD链中。
如果想要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。
网络防火墙设置测试
由于iptables此时的角色为"网络防火墙",所以需要在filter表中的FORWARD链中设置规则。
可以使用"白名单机制",先添加一条默认拒绝的规则,然后再为需要放行的报文设置规则。
配置规则时需要考虑"方向问题",针对请求报文与回应报文,考虑报文的源地址与目标地址,源端口与目标端口等。
# 允许网络内主机访问网络外主机的web服务与sshd服务。
# 在FORWARD链中放行内部主机对外部主机的web请求
iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT
# 在FORWARD链中放行外部主机对内部主机的回应请求
iptables -I FORWARD -d 10.1.0.0/16 -p tcp --sport 80 -j ACCEPT
# 22端口同理
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
# 在FORWARD链末端添加一条默认拒绝的规则
iptables -A FORWARD -j REJECT
# 可以使用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
一些注意点:
1.当测试网络防火墙时,默认前提为网络已经正确配置。
2.当测试网络防火墙时,如果出现问题,请先确定主机防火墙规则的配置没有问题。