iptables 相關內容整理
阿新 • • 發佈:2020-10-20
注意
無論如何,iptables是一個需要特別謹慎設定的東西,萬一伺服器不在你身邊,而你貿然設定導致無法SSH,那就等著被老闆罵吧,呵呵。。。
語法:
iptables (選項) (引數)
iptables命令選項輸入順序:
iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網絡卡名> -p 協議名 <-s 源IP/源子網> --sport 源埠 <-d 目標IP/目標子網> --dport 目標埠 -j 動作
表名包括:
raw:高階功能,如:網址過濾。 mangle:資料包修改(QOS),用於實現服務質量。 net:地址轉換,用於閘道器路由器。 filter:包過濾,用於防火牆規則。
規則鏈名包括:
INPUT鏈:處理輸入資料包。
OUTPUT鏈:處理輸出資料包。
PORWARD鏈:處理轉發資料包。
PREROUTING鏈:用於目標地址轉換(DNAT)。
POSTOUTING鏈:用於源地址轉換(SNAT)。
動作包括:
ACCEPT: 接收資料包。 DROP: 丟棄資料包。 REDIRECT: 重定向、對映、透明代理。 SNAT: 源地址轉換。 DNAT: 目標地址轉換。 MASQUERADE: IP偽裝(NAT),用於ADSL。 LOG: 日誌記錄。
常用命令
檢視現在iptables規則:
iptables -L -n -v
清空配置:
iptables -F #清楚規則鏈中已有的條目;使用iptables -F 要小心,搞不好,你就馬上同伺服器斷開連線了
iptables -X #刪除沒有使用者配置檔案相關的chain
iptables -Z #清空規則鏈中的資料包計算器和位元組計數器;
使用清空配置要小心,可參考https://blog.csdn.net/ingiaohi/article/details/70559425
用規則配置:
配置,禁止進,允許出,允許迴環網絡卡
iptables -P INPUT DROP iptables -A OUTPUT -j ACCEPT iptables -A INPUT -i lo -j ACCEPT
允許ping
iptables -A INPUT -p icmp -j ACCEPT
允許ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允許ftp
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
允許ftp被動介面範圍,在ftp配置檔案裡可以設定
iptables -A INPUT -p tcp --dport 20000:30000 -j ACCEPT
學習felix,把smtp設成本地
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT -s 127.0.0.1
iptables -A INPUT -p tcp -m tcp --dport 25 -j REJECT
允許DNS
iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
允許http和https
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
允許已建立的或相關連的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
禁止其他未允許的規則訪問
iptables -A INPUT -j REJECT #(注意:如果22埠未加入允許規則,SSH連結會直接斷開。)
iptables -A FORWARD -j REJECT
遮蔽ip——使用-I引數
iptables -I INPUT -s 123.45.6.7 -j DROP #遮蔽單個IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整個段即從123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即從123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即從123.45.6.1到123.45.6.254的命令是
刪除已新增的iptables規則——使用-D引數
假設之前用iptables -A INPUT -s 192.168.1.4 -j DROP 新增的規則
iptables -D INPUT -s 192.168.1.4 -j DROP
或者
查出當前規則的列表,使用當前列表下的序號:由下至下順序
iptables -D INPUT 3 #這裡是刪除第三條
修改規則——使用-R引數
假設之前用iptables -A INPUT -s 192.168.1.4 -j DROP 新增的規則
iptables -R INPUT -s 192.168.1.4 -j DROP
或者
查出當前規則的列表,使用當前列表下的序號:由下至下順序
iptables -R INPUT 3 -j ACCEPT
規則永久生效:包括重啟
service iptables save #儲存
service iptables restart #重啟iptables防火牆
備份與還原
儲存配置
iptables-save > /etc/iptables #(注意:後邊這個檔案路徑可以自選)
還原配置
iptables-restore < /etc/iptables #(注意:後邊這個檔案路徑可以自選,要是前邊備份檔案的位置)
關於不重啟規則不生效的解決
使用iptables命令操作的規則僅對當前會話有效,規則存在於記憶體中,如果重啟就會丟失規則,上邊提到永久生效的方法,經測試debian下沒有成功,所以這裡額外記述一些解決方案
本方法的原理是使用重啟後系統會掃描並執行指定資料夾下的指令碼,在指令碼內執行還原之前儲存的規則檔案
step1
儲存規則
iptables-save > /etc/iptables/iptables-script
step2
在/etc/network/if-pre-up.d目錄下建立指令碼
vim /etc/network/if-pre-up.d/auto_restore_iptables
step3
新增如下內容,其中後邊的路徑為儲存的規則檔案路徑
#!/bin/sh
/sbin/iptables-restore < /etc/iptables/iptables-script
儲存退出
step4
為指令碼新增可執行許可權
sudo chmod +x /etc/network/if-pre-up.d/auto_restore_iptables
至此,已經完成開機自動還原規則的操作了
那麼增、刪、改等操作就簡單了
1.使用命令修改規則
2.儲存規則
iptables-save > /etc/iptables/iptables-script