操作系统
Ubuntu 16.04
防火墙
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 // 显示如下内容
#ZONE TYPE OPTIONS IN OUT
fw firewall
net ipv4
loc ipv4
dmz ipv4
interfaces:设置防火墙区域与网口名称的对应关系。
cat interfaces // 显示如下内容
#ZONE INTERFACE OPTIONS
net enp2s0 tcpflags,dhcp,nosmurfs,routefilter,logmartians,sourceroute=0,physical=eth0
loc enp3s0 tcpflags,nosmurfs,routefilter,logmartians,physical=eth1
dmz enp4s0 tcpflags,nosmurfs,routefilter,logmartians,physical=eth2
policy:配置防火墙策略,防火墙区域之间是拒绝接受还是丢弃的策略,执行策略是由最后一条到第一条这样的顺序执行。
cat policy // 显示如下内容
#SOURCE DEST POLICY LOGLEVEL RATE CONNLIMIT
loc net ACCEPT
net all DROP info
# THE FOLLOWING POLICY MUST BE LAST
all all REJECT info
rules:可以设置转发规则和icmp、tcp协议等。
cat rules // 显示如下内容
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME HEADERS SWITCH HELPER #PORT PORT(S) DEST LIMIT GROUP
?SECTION ALL
?SECTION ESTABLISHED
?SECTION RELATED
?SECTION INVALID
?SECTION UNTRACKED
?SECTION NEW
# Don't allow connection pickup from the net
#
Invalid(DROP) net all tcp
#
# Accept DNS connections from the firewall to the Internet
#
DNS(ACCEPT) $FW net
#
#
# Accept SSH connections from the local network to the firewall and DMZ
#
SSH(ACCEPT) loc $FW
SSH(ACCEPT) loc dmz
#
# DMZ DNS access to the Internet
#
DNS(ACCEPT) dmz net
# 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) loc dmz
Ping(ACCEPT) dmz loc
Ping(ACCEPT) dmz net
ACCEPT $FW net icmp
ACCEPT $FW loc icmp
ACCEPT $FW dmz icmp
# 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) net dmz
#Ping(ACCEPT) net loc
shorewall如何配置bridge
zones
该文件配置防火墙区域,如下:
#ZONE TYPE OPTIONS
bridge ip
lan:bridge bport
priv:bridge bport
interfaces
该文件配置防火墙区域对应的接口,如下:
#ZONE INTERFACE OPTIONS
bridge br0 bridge
lan br0:enp3s0
priv br0:enp4s0