iptables和shorewall防火墙

操作系统

Ubuntu 16.04
防火墙 【iptables和shorewall防火墙】iptables用于建立,维护和检查Linux内核中IP包过滤规则的表格。
为了说明iptables有防火墙的作用,以bridge的网络配置为例讲解。
准备 两点准备:
1.由于工控机是Ubuntu 16.04,Linux内核4.1.0,没有br_netfilter模块,所以需要手动加载该模块。每次开机都要手动加载,很自然的加到开机自启动就省事了。
2.允许IP转发,即Allow IP forwarding。
手动加载:Linux内核加载
modprobe br_netfilter
开机自启动:Linux内核加载
vi /etc/rc.local // 这是开机自启动配置文件
modprobe br_netfilter // 把该命令加到该文件中的"exit 0"前面。
配置:Allow IP forwarding
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 // 把改行设置成1
bridge配置 birdge配置在该文章《Networking网络配置和Bridge配置》有说明,请移步https://www.jianshu.com/p/339d1b6f1089
参考该文章的[配置4:手动配置:br0连接2个网口]
最后的网络配置如下:
enp3s0连着192.168.40.11的设备
enp4s0连着192.168.40.10的设备
工控机有一个bridge为br0,包含enp3s0和enp4s0网口
现在的效果是:
192.168.40.10和192.168.40.11互相ping通。
想要达到的效果是:
192.168.40.11可以ping通192.168.40.10
192.168.40.10不可以ping通192.168.40.11
192.168.40.11可以上传文件到192.168.40.10
iptables配置以达到以上效果:
iptables -P FORWARD DROP // 最高安全原则,把默认的FORWARD policy设成DROP,测试结果:两个设备ping不通,scp无法上传文件
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT // 允许n个封包之后的连线
iptables -A FORWARD -d 192.168.40.10/32 -p icmp --icmp-type 8 -j ACCEPT // 设置允许ping通192.168.40.10,测试结果:192.168.40.11可以ping通192.168.40.10,192.168.40.10不可以ping通192.168.40.11
iptables -A FORWARD -s 192.168.40.0/24 -d 192.168.40.10/32 -p tcp --dport 22 -j ACCEPT // 设置40网段可以scp上传文件到192.168.40.10,测试结果:在192.168.40.11上输入命令scp /tmp/test11.odt suiqian@192.168.40.10:/tmp,发现可以把文件上传到192.168.40.10的tmp目录下。
ps:因为ssh传输文件默认端口是22,所以参数:--dport 22,可以依葫芦画瓢配置其他常用的端口有139,445等。
iptables常用命令:
iptables -L -n --line-number // 查看已配置的iptables
iptables -D FORWARD number号 // 上面命令显示iptables的nubmer号,所以可以根据number号删除iptables chain
清空iptables:
iptables /sbin/iptables -P INPUT ACCEPT // 先执行这条命令,
iptables -F // 然后清空
开启和关闭防火墙:
ufw enable
ufw disable
shorewall 以上防火墙内容是依据原生iptables命令配置的,现在介绍用文件方式配置防火墙,我们选择用shorewall。
http://shorewall.net/GettingStarted.html
不熟悉shorewall的可以根据官网学习配置。
安装
apt-get install shorewall
配置例子 如果了解了iptables配置的相关规则,理解shorewall文件方式配置也很容易上手。我们从例子开始入手。
安装shorewall后,有目录专门放着3种类型的例子,分别是单网口、2个网口、3个网口,即one-interfaces、two-interfaces、three-interfaces。
cd /usr/share/doc/shorewall/examples/
3个网口配置例子
因为我们用的工控机是3个网口的,所以参考three-interfaces。
cd /usr/share/doc/shorewall/examples/three-interfaces
会显示很多文件,重要文件有: zones,interfaces,rules,policy等。
zones:网口对应一个防火墙区域,防火墙fw也算一个区域。
cat zones // 显示如下内容
#ZONETYPEOPTIONSINOUT fwfirewall net ipv4 loc ipv4 dmz ipv4

interfaces:设置防火墙区域与网口名称的对应关系。
cat interfaces // 显示如下内容
#ZONEINTERFACEOPTIONS netenp2s0tcpflags,dhcp,nosmurfs,routefilter,logmartians,sourceroute=0,physical=eth0 locenp3s0tcpflags,nosmurfs,routefilter,logmartians,physical=eth1 dmzenp4s0tcpflags,nosmurfs,routefilter,logmartians,physical=eth2

policy:配置防火墙策略,防火墙区域之间是拒绝接受还是丢弃的策略,执行策略是由最后一条到第一条这样的顺序执行。
cat policy // 显示如下内容
#SOURCE DESTPOLICYLOGLEVELRATECONNLIMIT locnetACCEPT netallDROPinfo # THE FOLLOWING POLICY MUST BE LAST allallREJECTinfo

rules:可以设置转发规则和icmp、tcp协议等。
cat rules // 显示如下内容
#ACTIONSOURCEDESTPROTODESTSOURCEORIGINALRATEUSER/ MARKCONNLIMITTIMEHEADERSSWITCHHELPER #PORTPORT(S)DESTLIMITGROUP ?SECTION ALL ?SECTION ESTABLISHED ?SECTION RELATED ?SECTION INVALID ?SECTION UNTRACKED ?SECTION NEW #Don't allow connection pickup from the net # Invalid(DROP)netalltcp # #Accept DNS connections from the firewall to the Internet # DNS(ACCEPT)$FWnet # # #Accept SSH connections from the local network to the firewall and DMZ # SSH(ACCEPT)loc$FW SSH(ACCEPT)locdmz # #DMZ DNS access to the Internet # DNS(ACCEPT)dmznet # Drop Ping from the "bad" net zone. Ping(DROP)net$FW # #Make ping work bi-directionally between the dmz, net, Firewall and local zone #(assumes that the loc-> net policy is ACCEPT). # Ping(ACCEPT)loc$FW Ping(ACCEPT)dmz$FW Ping(ACCEPT)locdmz Ping(ACCEPT)dmzloc Ping(ACCEPT)dmznet ACCEPT$FWneticmp ACCEPT$FWlocicmp ACCEPT$FWdmzicmp # Uncomment this if using Proxy ARP and static NAT and you want to allow ping from # the net zone to the dmz and loc #Ping(ACCEPT)netdmz #Ping(ACCEPT)netloc

shorewall如何配置bridge zones
该文件配置防火墙区域,如下:
#ZONETYPEOPTIONS bridgeip lan:bridgebport priv:bridgebport

interfaces
该文件配置防火墙区域对应的接口,如下:
#ZONEINTERFACEOPTIONS bridgebr0bridge lanbr0:enp3s0 privbr0:enp4s0

    推荐阅读