1. 程式人生 > 實用技巧 >iptables 相關內容整理

iptables 相關內容整理

注意

無論如何,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