1. 程式人生 > >Linux環境下iptables防火牆基本用法演示

Linux環境下iptables防火牆基本用法演示

一、簡單新增

兩臺裝置,防火牆關閉,防火牆規則很乾淨,網路通暢。

image.png

當啟用防火牆後,iptables -vnL顯示出所有規則,但我們不使用預設規則,清空規則,自己定義

image.png

1、iptable -t filter -A INPUT -s 192.168.239.70 -j DROP(末尾新增),設定源地址是192.168.239.70發出的請求,全丟棄,即不迴應

image.png

之前是通的,但設定完防火牆規則後的DROP(丟棄)就卡在這裡,游標不停閃爍

image.png

2、iptables -I INPUT -s 192.168.239.70 -j REJECT,插入規則,源地址為192.168.239.70的主機發出的請求全部拒絕,這裡直接返回目標埠不可到達

iptables -I INPUT 2 -s 192.168.239.70 -j REJECT,插入第二條

image.png

3、iptables -D INPUT 2,刪除INPUT中的第二條規則

image.png

4、iptables -R INPUT 2 -s 192.168.1.1 -j REJECT,替換規則中第2條源地址ip由192.168.239.70更改為192.168.1.1

image.png

5、iptables -A INPUT -s 192.168.239.70,192.168.239.71 -j REJECT,一次加入兩條ip

image.png

6、iptables -A INPUT -s ! 192.168.239.70 -j REJECT,除了192.168.239.70的ip,全部拒絕

生產中為了避免自己設定規則時候不小心把自己踢出,應做防火牆備份,再用at執行計劃,設定5分鐘後執行,等規則設定完成後再取消計劃,避免產生不必要的麻煩

7、iptables -P INPUT DROP,更改策略中只要不匹配就DROP,預設為ACCEPT(只支援ACCEPT和DROP,不支援REJECT),最好不要進行更改

image.png

8、iptables -A OUTPUT -d 192.168.239.70 -j DROP,拒絕本機流出報文訪問目標地址192.168.239.70

image.png

此時192.168.239.70也不會ping通本機,因為報文的傳導是有去有回的

image.png

抓包檢視

image.png

9、取反

iptables -A INPUT ! -s 192.168.239.1 -j REJECT

除了192.168.239.1,可以連線,其餘全部拒絕

image.png

測試,connection refused

image.png

10、設定一個網段的主機都可以訪問

iptables -A INPUT -s 192.168.239.0/24 -j ACCEPT

image.png

二、檢視命令

iptables -vnL

iptables -vnnnL

iptables -S

image.png

這裡記錄了防火牆的規則,如果另一臺裝置也需要同樣的防火牆規則,可以將其生存檔案,並

iptables -S > iptables.log

while read line; do done iptables $line < iptables.log

三、規則管理

1、iptables -F,清空防火牆規則

這是有防火牆列表的

image.png

輸入命令

image.png

2、iptables -Z

image.png

三、基本匹配

1、-p {tcp|udp|icmp}

iptables -A INPUT -s 192.168.239.70 -p icmp -j REJECT

image.png

結果

image.png

由於禁止的是icmp協議,ssh基於的是tcp協議,但ssh還是可以

image.png

2、-i,資料報文流入介面

iptables -A INPUT -i eth0 -j ACCEPT,從eth0網絡卡流入的資料報文全部允許,適用於多種網絡卡情況

四、擴充套件匹配-隱式匹配

1、設定多個ip同時加入規則

開啟我的雲伺服器,lastb發現有幾個ip嘗試登陸我的雲伺服器,將這些ip全部加入黑名單

image.png

iptables -A INPUT -s 103.207.37.253,118.123.244.228,119.6.103.44,5.188.10.156,103.207.37.253,103.207.38.226,14.226.255.211,78.198.69.64 -j REJECT

image.png

2、tcp

--tcp-flags SYN表示第一次握手,等於--syn

--tcp-flags SYN,ACK表示第二次握手

--tcp-flasg ACK表示第三次握手

輸入指令iptables -A INPUT -p tcp --syn -j REJECT,檢視

image.png

測試結果

之前已經連線到192.168.239.60的主機可以繼續使用,而其他主機連線被拒絕

image.png

3、icmp

--icmp-type 8 icmp請求報文

--icmp-type 0 icmp響應報文

iptables -A INPUT -p icmp --icmp-type 8 -j REJECT,拒絕進來請求報文,測試結果為

image.png

這造成了我能ping通你,但你ping不通我

image.png

4、開放埠

以SAMBA服務舉例,連線SAMBA服務需要開放139、445埠,未開放前

image.png

輸入指令iptables -A INPUT -p tcp --dport 139 -j ACCEPT和iptables -A INPUT -p tcp --dport 445 -j ACCEPT之後,已經可以連線

image.png

五、自定義鏈

1、iptables -N WEBSRV ,起名

iptables -N WEBSRV FILESRV,自定義鏈改名由WEBSRV變為FILESRV

iptables -A FILESRV -p tcp --dport 139 -j ACCEPT,向FILESRV新增允許139埠通過的規則

image.png

2、關聯

此時做測試,無法登入

image.png

iptables -A INPUT -s 192.168.239.71 -j FILESRV

image.png

測試結果

image.png

自定義鏈類似於shell中的函式呼叫理念,提前預設好,等使用時候直接用即可

六、顯示擴充套件

1、multiport 擴充套件埠,解決埠不連續的問題

iptables -I INPUT -p tcp -m multiport --dports 80,443,3306 -j ACCEPT

image.png

如果命令是iptables -I INPUT -p tcp -m multiport --dports 80:88,443,3306 -j ACCEPT,新增的埠是80,81,82,83,84,85,86,87,88,443,3306

2、定義ip範圍

iptables -A INPUT -m iprange --src-range 192.168.239.60-192.168.239.69 -j ACCEPT

image.png

本機192.168.239.60無法ping通192.168.239.70,此時新增規則

image.png

可以ping通

image.png

3、MAC擴充套件

iptables -A INPUT -s 192.168.1.1 [!] -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT

4、string擴充套件

對報文中的應用層資料做字串模式匹配檢測

iptable -A OUTPUT -m string --string  "baidu" --algo bm -j REJECT

檢視iptables規則,此時可以ping通www.baidu.com

image.png

設定string擴充套件規則,之後再次ping www.baidu.com失敗

image.png

5、time擴充套件

iptables -A OUTPUT  -m time --timestart 1:00 --timestop 9:00 --weekdays 2,4,6 -j REJECT

設定UTC時間1:00-9:00(北京時間9:00-18:00),週二四六不能流出報文

image.png

6、connlimit擴充套件,併發連線數擴充套件

控制單個ip最多可以發起多少個連線數,防止******(cc***,挑戰黑洞)

iptables -A INPUT -m connlimit --connlimit-above 100 -j REJECT

拒絕併發連線數大於100的訪問

image.png

測試

image.png

當併發數大於100時拒絕

image.png

7、limit擴充套件

基於收發報文的速率做匹配

iptables -I INPUT 2 -m limit --limit 6/minute --limit-burst 10 -j ACCEPT

iptables -A INPUT -j REJECT

一分鐘前十次ping 本機不理會,超過十個後拒絕,後面ping中均勻分佈每分鐘ping通6次

image.png

測試結果

image.png

8、state擴充套件

NEW:新發出請求;連線追蹤資訊庫中不存在此連線的相關資訊條目,因此,將其識別為第一次發出的請求,即新連線,但不影響正在連線的

ESTABLISHED:NEW狀態之後,連線追蹤資訊庫中為其建立的條目失效之前期間內所進行的通訊狀態,即正在連線的

RELATED:新發起的但與已有連線相關聯的連線,如:ftp協議中的資料連線與命令連線之間的關係

INVALID:無效的連線,如flag標記不正確

UNTRACKED:未進行追蹤的連線,如raw表中關閉追蹤

七、target

LOG:

iptables -A INPUT -s 192.168.239.60 -j LOG --log-prefix "iptables:" ,--log-prefix,字首的意思

注意日誌變化

image.png

輸入ping指令後

image.png

和state相結合,可以iptables -I INPUT 3  -s 192.168.239.0/16 -m state --state NEW -j LOG --lgo-prefix "自定義字元",只要192.168.239.0網段的新主機訪問本主機,日誌都會記錄下來

八、iptables策略的儲存

CentOS6的儲存service ipatables save,系統會自動儲存到 /etc/sysconfig/iptables

重啟服務系統會自動讀取該檔案

CentOS7的儲存,iptables-save > /DIR/FILE,讀取時候iptables-restore < /DIR/FILE,

因此需要在/etc/rc.d/rc.local中寫入iptables-restore < /DIR/FILE(記得對rc.local加執行許可權)

九、NAT的實現

iptables -t nat -A POSTROUTING -s 192.168.31.0/24 -j SNAT --to-source 172.18.0.123