操作系統(tǒng)
Ubuntu 16.04
防火墻
iptables用于建立狗唉,維護(hù)和檢查Linux內(nèi)核中IP包過濾規(guī)則的表格台盯。
為了說明iptables有防火墻的作用掌逛,以bridge的網(wǎng)絡(luò)配置為例講解陨仅。
準(zhǔn)備
兩點(diǎn)準(zhǔn)備:
1.由于工控機(jī)是Ubuntu 16.04,Linux內(nèi)核4.1.0寓调,沒有br_netfilter模塊锌唾,所以需要手動(dòng)加載該模塊。每次開機(jī)都要手動(dòng)加載夺英,很自然的加到開機(jī)自啟動(dòng)就省事了晌涕。
2.允許IP轉(zhuǎn)發(fā),即Allow IP forwarding痛悯。
手動(dòng)加載:Linux內(nèi)核加載
modprobe br_netfilter
開機(jī)自啟動(dòng):Linux內(nèi)核加載
vi /etc/rc.local // 這是開機(jī)自啟動(dòng)配置文件
modprobe br_netfilter // 把該命令加到該文件中的"exit 0"前面余黎。
配置:Allow IP forwarding
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 // 把改行設(shè)置成1
bridge配置
birdge配置在該文章《Networking網(wǎng)絡(luò)配置和Bridge配置》有說明,請(qǐng)移步http://www.reibang.com/p/339d1b6f1089
參考該文章的[配置4:手動(dòng)配置:br0連接2個(gè)網(wǎng)口]
最后的網(wǎng)絡(luò)配置如下:
enp3s0連著192.168.40.11的設(shè)備
enp4s0連著192.168.40.10的設(shè)備
工控機(jī)有一個(gè)bridge為br0载萌,包含enp3s0和enp4s0網(wǎng)口
現(xiàn)在的效果是:
192.168.40.10和192.168.40.11互相ping通惧财。
想要達(dá)到的效果是:
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配置以達(dá)到以上效果:
iptables -P FORWARD DROP // 最高安全原則,把默認(rèn)的FORWARD policy設(shè)成DROP扭仁,測試結(jié)果:兩個(gè)設(shè)備ping不通可缚,scp無法上傳文件
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT // 允許n個(gè)封包之后的連線
iptables -A FORWARD -d 192.168.40.10/32 -p icmp --icmp-type 8 -j ACCEPT // 設(shè)置允許ping通192.168.40.10,測試結(jié)果: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 // 設(shè)置40網(wǎng)段可以scp上傳文件到192.168.40.10,測試結(jié)果:在192.168.40.11上輸入命令scp /tmp/test11.odt suiqian@192.168.40.10:/tmp知给,發(fā)現(xiàn)可以把文件上傳到192.168.40.10的tmp目錄下瓤帚。
ps:因?yàn)閟sh傳輸文件默認(rèn)端口是22描姚,所以參數(shù):--dport 22,可以依葫蘆畫瓢配置其他常用的端口有139戈次,445等轩勘。
iptables常用命令:
iptables -L -n --line-number // 查看已配置的iptables
iptables -D FORWARD number號(hào) // 上面命令顯示iptables的nubmer號(hào),所以可以根據(jù)number號(hào)刪除iptables chain
清空iptables:
iptables /sbin/iptables -P INPUT ACCEPT // 先執(zhí)行這條命令怯邪,
iptables -F // 然后清空
開啟和關(guān)閉防火墻:
ufw enable
ufw disable
shorewall
以上防火墻內(nèi)容是依據(jù)原生iptables命令配置的绊寻,現(xiàn)在介紹用文件方式配置防火墻,我們選擇用shorewall悬秉。
http://shorewall.net/GettingStarted.html
不熟悉shorewall的可以根據(jù)官網(wǎng)學(xué)習(xí)配置澄步。
安裝
apt-get install shorewall
配置例子
如果了解了iptables配置的相關(guān)規(guī)則,理解shorewall文件方式配置也很容易上手和泌。我們從例子開始入手村缸。
安裝shorewall后,有目錄專門放著3種類型的例子武氓,分別是單網(wǎng)口梯皿、2個(gè)網(wǎng)口、3個(gè)網(wǎng)口县恕,即one-interfaces东羹、two-interfaces、three-interfaces忠烛。
cd /usr/share/doc/shorewall/examples/
3個(gè)網(wǎng)口配置例子
因?yàn)槲覀冇玫墓た貦C(jī)是3個(gè)網(wǎng)口的属提,所以參考three-interfaces。
cd /usr/share/doc/shorewall/examples/three-interfaces
會(huì)顯示很多文件况木,重要文件有: zones垒拢,interfaces,rules,policy等。
zones:網(wǎng)口對(duì)應(yīng)一個(gè)防火墻區(qū)域火惊,防火墻fw也算一個(gè)區(qū)域求类。
cat zones // 顯示如下內(nèi)容
#ZONE TYPE OPTIONS IN OUT
fw firewall
net ipv4
loc ipv4
dmz ipv4
interfaces:設(shè)置防火墻區(qū)域與網(wǎng)口名稱的對(duì)應(yīng)關(guān)系。
cat interfaces // 顯示如下內(nèi)容
#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:配置防火墻策略屹耐,防火墻區(qū)域之間是拒絕接受還是丟棄的策略尸疆,執(zhí)行策略是由最后一條到第一條這樣的順序執(zhí)行。
cat policy // 顯示如下內(nèi)容
#SOURCE DEST POLICY LOGLEVEL RATE CONNLIMIT
loc net ACCEPT
net all DROP info
# THE FOLLOWING POLICY MUST BE LAST
all all REJECT info
rules:可以設(shè)置轉(zhuǎn)發(fā)規(guī)則和icmp惶岭、tcp協(xié)議等寿弱。
cat rules // 顯示如下內(nèi)容
#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
該文件配置防火墻區(qū)域,如下:
#ZONE TYPE OPTIONS
bridge ip
lan:bridge bport
priv:bridge bport
interfaces
該文件配置防火墻區(qū)域?qū)?yīng)的接口按灶,如下:
#ZONE INTERFACE OPTIONS
bridge br0 bridge
lan br0:enp3s0
priv br0:enp4s0