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配置》有說明,請移步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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容