操作系統
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配置》有說明,請移步http://www.lxweimin.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