跳至內容

Linux防火牆之-iptables詳解

更新時間
快连VPN:速度和安全性最佳的VPN服务
快连VPN:速度和安全性最佳的VPN服务

項目介紹

iptables是linux系統下的免費包過濾防火牆軟件,可實現封包過濾、封包重定向和網絡地址轉換等功能。它是一個高效且靈活的解決方案,可代替昂貴的商業防火牆。iptables具有強大的配置選項和規則設置,使用戶能夠根據自身需求對網絡流量進行精細控制,提高網絡安全性和性能。

iptables的規則其實是指網絡管理員預定義的條件,規則一般的定義爲“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是添加、修改和刪除這些規則。

iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾、網絡地址轉換、包重構(修改)和數據跟蹤處理。而每一條鏈其實只是衆多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則。如果該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的默認策略來處理數據包。

總的來說,iptables是一個功能強大的工具,用於配置Linux系統上的防火牆和網絡地址轉換功能。

替換系統防火牆: 在Centos7系統中默認防火牆管理工具不是iptables,當需要使用時則需要自己安裝替換.

[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable firewalld[root@localhost ~]# yum install -y iptables iptables-services[root@localhost ~]# systemctl restart iptables[root@localhost ~]# systemctl enable iptables
登錄後複製

查詢完整防火牆規則: 使用 -L -n –line-numbers 參數查看防火牆默認配置規則.

[root@localhost ~]# iptables -L -n --line-numbers[root@localhost ~]# iptables -F # 臨時清空規則Chain INPUT (policy ACCEPT)numtarget prot opt source destination 1ACCEPT all--0.0.0.0/00.0.0.0/0state RELATED,ESTABLISHED2ACCEPT icmp --0.0.0.0/00.0.0.0/0 3ACCEPT all--0.0.0.0/00.0.0.0/0 4ACCEPT tcp--0.0.0.0/00.0.0.0/0state NEW tcp dpt:225REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT)numtarget prot opt source destination 1REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)numtarget prot opt source destination
登錄後複製

設置防火牆默認拒絕: 設置默認拒絕規則,把 INPUT 鏈設置爲默認拒絕,也就是拒絕所有連接請求.

[root@localhost ~]# iptables -P INPUT DROP[root@localhost ~]# iptables -L -n --line-numbersChain INPUT (policy DROP) #這裏可以看出INPUT鏈已變成DROPnumtarget prot opt source destination Chain FORWARD (policy ACCEPT)numtarget prot opt source destination Chain OUTPUT (policy ACCEPT)numtarget prot opt source destination
登錄後複製

開啓防火牆ICMP回顯: 在默認規則拒絕的情況下,設置開啓ICMP測試,允許主機ping通.

[root@localhost ~]# iptables -I INPUT -p icmp -j ACCEPT[root@localhost ~]# iptables -L -n --line-numbersChain INPUT (policy DROP)numtarget prot opt source destination 1ACCEPT icmp --0.0.0.0/00.0.0.0/0 Chain FORWARD (policy ACCEPT)numtarget prot opt source destination Chain OUTPUT (policy ACCEPT)numtarget prot opt source destination
登錄後複製

允許客戶SSH遠程連接: 在默認拒絕的情況下,設置開啓22號端口,允許遠程ssh連接到本機.

[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT[root@localhost ~]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT[root@localhost ~]# iptables -L -n --line-numbersChain INPUT (policy ACCEPT)numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22Chain OUTPUT (policy ACCEPT)numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp spt:22
登錄後複製

刪除指定規則: 在默認拒絕的情況下,刪除INPUT鏈,第2條數據,刪除ICMP規則.

[root@localhost ~]# iptables -L -n --line-numbersChain INPUT (policy DROP)numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:222ACCEPT icmp --0.0.0.0/00.0.0.0/0 [root@localhost ~]# iptables -D INPUT 2[root@localhost ~]# iptables -L -n --line-numbersChain INPUT (policy DROP)numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22
登錄後複製

指定允許網段訪問: 在默認拒絕的情況下,設置只允許192.168.1.0/24網段的主機訪問本機的22號端口.

[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT[root@localhost ~]# iptables -I OUTPUT -s 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT[root@localhost ~]# iptables -L -n --line-numbersChain INPUT (policy DROP)numtarget prot opt source destination 1ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22Chain OUTPUT (policy ACCEPT)numtarget prot opt source destination 1ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp spt:22
登錄後複製

拒絕訪問指定端口: 在INPUT規則鏈中,添加拒絕所有人訪問本機的8888號端口.

[root@localhost ~]# iptables -I INPUT -p tcp --dport 8888 -j REJECT[root@localhost ~]# iptables -L -n --line-numbersChain INPUT (policy DROP)numtarget prot opt source destination 1REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable2ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
登錄後複製

拒絕訪問指定主機網段的端口: 在INPUT規則鏈中,添加拒絕192.168.1.20主機訪問本機的80端口.

[root@localhost ~]# iptables -I INPUT -p tcp -s 192.168.1.20 --dport 80 -j REJECT[root@localhost ~]# iptables -L -n --line-numbersChain INPUT (policy DROP)numtarget prot opt source destination 1REJECT tcp--192.168.1.20 0.0.0.0/0tcp dpt:80 reject-with icmp-port-unreachable2REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable3ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
登錄後複製

拒絕訪問指定端口範圍: 在INPUT規則鏈中,添加拒絕所有主機訪問本機1000-2000端口.

[root@localhost ~]# iptables -A INPUT -p tcp --dport 1000:2000 -j REJECT[root@localhost ~]# iptables -A INPUT -p udp --dport 1000:2000 -j REJECT[root@localhost ~]# iptables -L -n --line-numbersChain INPUT (policy DROP)numtarget prot opt source destination 1REJECT tcp--192.168.1.20 0.0.0.0/0tcp dpt:80 reject-with icmp-port-unreachable2REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable3ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:224REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpts:1000:2000 reject-with icmp-port-unreachable5REJECT udp--0.0.0.0/00.0.0.0/0udp dpts:1000:2000 reject-with icmp-port-unreachable
登錄後複製

SNAT-源地址轉換: 從本地發出的數據包,經過SNAT後,會自動僞裝成公網的IP,並以公網IP訪問指定服務.

#例:將本地 192.168.1.1 的請求自動僞裝成外網地址 59.110.167.234[root@localhost ~]# iptables -t nat -A POSTROUTING -o ens32 -s 192.168.1.1 -j SNAT --to-source 59.110.167.234-o#指定外網接口,此處爲ens32-s#指定內網口地址,此處爲192.168.1.1--to-source #外網口的地址
登錄後複製

DNAT-目標地址轉換: 從公網接收的數據包,經過DNAT後,會自動將數據包轉到指定的內網主機.

#例:將請求 59.110.167.234 且端口爲 80 的數據包,自動映射到內網 192.168.1.10[root@localhost ~]# iptables -t nat -A PREROUTING -i ens32 -d 59.110.167.234 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10--to-destination #內網口地址,此處爲192.168.1.1-i #綁定外網接口,此處爲ens32-d #外網地址,此處爲8.8.8.8-dport #內網端口,此處爲80
登錄後複製

限制物理請求連接數: iptables可以利用connlimit模塊實現限制同一IP針對某個端口的連接數. 允許限制每個客戶端IP的併發連接數,即每個IP同時連接到一個服務器個數,還可以限制內網用戶的網絡使用,對服務器而言則可以限制每個IP發起的連接數.

# 限制同一IP同時最多100個http連接[root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT[root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit ! --connlimit-above 100 -j ACCEPT# 只允許每組C類IP同時100個http連接[root@localhost ~]# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT# 只允許每個IP同時5個80端口轉發,超過的丟棄[root@localhost ~]# iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP# 限制某IP最多同時100個http連接[root@localhost ~]# iptables -A INPUT -s 192.168.1.100 -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT# 限制每IP在一定的時間(比如60秒)內允許新建立最多100個http連接數[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 100 -j REJECT[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
登錄後複製

配置基本防火牆規則: 我們可以在新安裝的系統中依次執行下方代碼,來配置一個基本的防火牆規則.

# 刪除已有規則iptables --delete-chainiptables --flush# 默認禁止進,允許出,允許迴環網卡iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT ACCEPTiptables -A INPUT -i lo -j ACCEPT# 允許已建立的或相關連接的通行iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT# 限制80端口443端口的單個IP的最大連接數爲10iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROPiptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 10 -j DROP# 允許80(HTTP)/873(RSYNC)/443(HTTPS)/20,21(FTP)/25(SMTP)端口的連接iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT# 允許SSH端口的連接,放行SSH端口iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPTiptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT# 允許pingiptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT# 放行允許DNS解析端口iptables -A OUTPUT -p udp -m udp -d 8.8.8.8 --dport 53 -j ACCEPTiptables -A OUTPUT -p udp -m udp -d 114.114.114.114 --dport 53 -j ACCEPT# 保存規則iptables-save
登錄後複製

生產常用配置規則: 下面是收藏的一些生成環境下常用規則的配置,一般情況下配置這些規則足夠使用.

 filter -P INPUT DROP #設置默認規則,拒絕所有iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT#放行80口iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT #放行22口iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT#放行22口iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT#放行80端口iptables -t filter -I INPUT -p tcp --dport 443-j ACCEPT#插入在頂端一條放行443端口的規則iptables -t filter -I INPUT 2 -p tcp --dport 443 -j ACCEPT #在第二列插入一條443放行規則iptables -t filter -A INPUT -p tcp --dport 80 -j DROP#丟棄80端口的請求iptables -I INPUT 2 -p icmp -j DROP#丟棄ICMP請求iptables -t filter -D INPUT 3#刪除第三條規則iptables -A FORWARD -s 192.168.1.10 -j REJECT#拒絕IP的轉發請求iptables -I INPUT -s 10.20.30.0/24 -j DROP #丟棄IP網段的入站請求iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP#丟棄從eth1網卡流入,且地址匹配的數據包iptables -A INPUT -o eth0 -s 192.168.1.0/24 -j DROP#丟棄從eth0網卡流出,且地址匹配的數據包iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT #放行20-21端口的數據包iptables -I INPUT -p tcp -m multiport --dport 80-90,85 -j ACCEPTiptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.10-192.168.1.100 -j ACCEPT
登錄後複製

以上就是Linux防火牆之-iptables詳解的詳細內容,更多請關注本站其它相關文章!

更新時間

發表留言

請注意,留言須先通過審核才能發佈。