iptables和shorewall防火墙

操作系统

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 [email protected]:/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

你可能感兴趣的:(iptables和shorewall防火墙)