一、基本概念
Linux防火牆的本質是一個將出入的數據流流量打包起來過一遍篩子,沒有設置規則的數據包會被直接丟棄,經過規則的數據包則被放行。
iptables是Linux防火牆的一個工具,用於配置Linux內核的網絡數據包過濾表、NAT表和mangle表,控制信息流進流出的控制中心。
iptables規則由鏈、表、匹配和動作4個基本元素組成:
- 鏈:是由預定義名稱組成的規則列表,每個數據流都必須經過一個或多個鏈才能處理。
- 表:由iptables規則組成的有序規則集合。
- 匹配:在選擇匹配時,iptables會檢測數據流中數據包的頭部信息(被稱作“匹配項”),根據這些信息來匹配數據流
- 動作:iptables根據匹配結果執行一個動作。
二、iptables基本命令
當需要更新防火牆規則,通常執行如下命令:
iptables -t [匹配模式] -j
其中,各個選項的含義如下:
- -t 表示防火牆表名稱,默認為filter表。
- add表示新增、insert表示插入、append表示追加、delete表示刪除、replace表示替換等。
- 表示在哪個防火牆鏈中應用規則,通常為INPUT、FORWARD、OUTPUT。
- [匹配模式] 表示需要對數據流的哪些特定數據包進行防火牆動作。
- -j 表示進行匹配後應該執行哪個動作。
三、鏈類型詳解
Linux防火牆iptables可以支持3種基本鏈,每種鏈都有自己的處理方式和鉤子:
- INPUT:處理目的主機為本機的數據流。
- OUTPUT:處理源主機為本機的數據流。
- FORWARD:處理兩個不同的主機之間的數據流。通常在一台網關主機上設置,並且該主機需要有兩個網卡來處理進入和發出的流量。
四、防火牆規則
4.1默認策略
Linux防火牆iptables可以使用三種默認策略,即DROP、ACCEPT和REJECT。
#將所有規則的默認策略設置為drop iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP #將所有規則的默認策略設置為accept iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT
REJECT與DROP相似,但是會給源主機發送一個錯誤響應消息,表示連接被拒絕。這比DROP更加安全,因為DROP會導致連續重試。
4.2 IP地址過濾規則
IP地址過濾是一個黑白名單的過程,在這個過程中,iptables會根據源IP地址和目的IP地址來過濾數據包。例如:
#允許來自192.168.1.4的TCP連接 iptables -A INPUT -s 192.168.1.4 -p tcp -j ACCEPT #禁止來自192.168.1.6的UDP連接 iptables -A INPUT -s 192.168.1.6 -p udp -j DROP #將指定的IP地址列入黑名單 iptables -A INPUT -s 192.168.1.5 -j DROP
4.3 端口過濾規則
iptables也可以根據端口號過濾數據包,允許或者禁止指定端口的訪問:
#允許來自B主機的80、8080端口的TCP連接 iptables -A INPUT -s 192.168.1.5 -p tcp --dport 80,8080 -j ACCEPT #禁止所有的3389端口的TCP連接 iptables -A INPUT -p tcp --dport 3389 -j DROP
4.4 發送標記(Masquerading)
使用iptables的Masquerading規則來允許防火牆主機將內部IP地址轉換為公共IP地址(NAT):
#允許eth1上的IP地址能夠訪問外部網絡,將其IP地址發送標記 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
4.5 內部端口轉發規則
當需要將外部請求轉發到內部網絡的指定端口時,可以使用iptables的端口轉發規則:
#將外部TCP請求轉發到本機的8080端口 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
五、常見問題及解決方案
5.1 如何永久保存iptables設置?
為了防止重啟系統而導致iptables規則被重置,需要執行如下步驟永久保存iptables設置:
#安裝iptables-persistent sudo apt-get install iptables-persistent #保存當前的規則 sudo netfilter-persistent save #重新加載已經保存過的規則 sudo netfilter-persistent reload
5.2iptables不生效怎麼辦?
當iptables設置不生效時,有一些常見的原因和解決方法:
- 檢查設置的規則是否正確,可以通過iptables -L命令查看規則。
- 檢查規則的順序是否正確,規則以順序執行。
- 檢查iptables服務是否已經啟動,可以通過systemctl status iptables查看iptables服務的運行狀態。
- 檢查是否有其他的程序干擾iptables規則的生效,例如firewalld和ufw。
5.3 如何使用iptables限制SSH登錄次數?
為了防止SSH暴力破解,需要設置iptables來限制登錄次數:
#將所有SSH登錄請求發送到另一個新鏈進行處理 iptables -N SSH_CHECK #將SSH連接計數器設置為0 iptables -A SSH_CHECK -m recent --name SSH --set --rsource -j DROP #當連接次數達到限制時,禁止SSH登錄 iptables -A SSH_CHECK -m recent --name SSH --update --seconds 60 --hitcount 3 --rsource -j DROP #將SSH_CHECK鏈接到INPUT鏈 iptables -A INPUT -p tcp --dport ssh -j SSH_CHECK
六、結論
iptables是一個強大的工具,可以使系統更加安全,但同時也需要仔細考慮規則的設置,以確保應用程序的正常運行。
原創文章,作者:RCKHB,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/363899.html