1. 程式人生 > >LINUX iptables規則學習筆記

LINUX iptables規則學習筆記

網絡安全

防火墻策略

防火墻策略一般分為兩種,一種叫“通”策略,一種叫“堵”策略,通策略,默認門是關著的,必須要定義誰能進。堵策略則是,大門是洞開的,但是你必須有身份認證,否則不能進。所以我們要定義,讓進來的進來,讓出去的出去,所以通,是要全通,而堵,則是要選擇。當我們定義的策略的時候,要分別定義多條功能,其中:定義數據包中允許或者不允許的策略,filter過濾的功能,而定義地址轉換的功能的則是nat選項。為了讓這些功能交替工作,我們制定出了“表”這個定義,來定義、區分各種不同的工作功能和處理方式。

用的比較多個功能有3個
1.filter 定義允許或者不允許的
2.nat 定義地址轉換的
3.mangle功能:修改報文原數據

iptables是工作在用戶空間的,它可以讓規則進行生效的,本身不是一種服務,而且規則是立即生效的。而我們iptables現在被做成了一個服務,可以進行啟動,停止的。啟動,則將規則直接生效,停止,則將規則撤銷。

iptables還支持自己定義鏈。但是自己定義的鏈,必須是跟某種特定的鏈關聯起來的。在一個關卡設定,指定當有數據的時候專門去找某個特定的鏈來處理,當那個鏈處理完之後,再返回。接著在特定的鏈中繼續檢查。

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

註意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。

規則表之間的優先順序 Raw——mangle——nat——filter

語法

iptables(選項)(參數)

選項
-t<表>:指定要操縱的表;
-A:向規則鏈中添加條目;在當前鏈的最後新增一個規則
-D num:從規則鏈中刪除條目;明確指定刪除第幾條規則
-I num:向規則鏈中插入條目;把當前規則插入為第幾條
-R num :替換規則鏈中的條目;Replays替換/修改第幾條規則
-L num:顯示規則鏈中已有的條目;
-F:清除規則鏈中已有的條目;
-Z:清空規則鏈中的數據包計算器和字節計數器;

-N:創建新的用戶自定義規則鏈;
-P:定義規則鏈中的默認目標;
-h:顯示幫助信息;
-p:指定要匹配的數據包協議類型;-p tcp|udp --dport 80
-s:指定要匹配的數據包源ip地址;
-j<目標>:指定要跳轉的目標;
-i<網絡接口>:指定數據包進入本機的網絡接口;eth0 流入一般用在INPUT和PREROUTING上
-o<網絡接口>:指定數據包要離開本機所使用的網絡接口。eth0 流出一般在OUTPUT和POSTROUTING上

iptables命令選項輸入順序
iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網卡名> -p 協議名 <-s 源IP/源子網> --sport 源端口 <-d 目標IP/目標子網> --dport 目標端口 -j 動作

表名包括
raw:高級功能,如:網址過濾。
mangle:數據包修改(QOS),用於實現服務質量。
net:地址轉換,用於網關路由器。
filter:包過濾,用於防火墻規則

動作包括

ACCEPT:接收數據包。
DROP:丟棄數據包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址轉換。
DNAT:目標地址轉換。
MASQUERADE:IP偽裝(NAT),用於ADSL。
LOG:日誌記錄。

案例

允許所有IP訪問
iptables -A INPUT -j ACCEPT

禁止所有網絡訪問
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

開放指定IP訪問
iptables -A INPUT -s 192.167.3.4 -j ACCEPT

拒絕指定IP訪問
iptables -A INPUT -s 192.167.3.4 -j REJECT

允許指定源IP訪問指定目標IP
iptables -A INPUT -i eth0 -s 10.1.6.41 -d 10.1.6.129 -j ACCEPT

允許指定源IP訪問指定目標IP 以及目標端口
iptables -A INPUT -i eth0 -s 10.1.6.41 -d 10.1.6.129 -p tcp --dport 22 -j ACCEPT
指定連續的端口--dport 8080-9000 不能指定多個非連續端口
iptables -A INPUT -i eth0 -s 10.1.6.41 -d 10.1.6.129 -p tcp --dport 8080-9000 -j ACCEPT
-p tcp:TCP協議的擴展
--dport 21 指定目標端口
--sport 指定源端口

-p udp:UDP協議的擴展
--dport:指定目標端口
--sport:指定源端口
-p icmp:icmp數據報文的擴展

--icmp-type:
echo-request(請求回顯),一般用8 來表示
所以 --icmp-type 8 匹配請求回顯數據包
echo-reply (響應的數據包)一般用0來表示

允許本地回環接口(即運行本機訪問本機)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#允許已建立的或相關連的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允許所有本機向外的訪問
iptables -A OUTPUT -j ACCEPT

允許所有網絡訪問22|80|ftp21|ftp20端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

允許指定IP網絡訪問22|80|ftp21|ftp20端口
iptables -A INPUT -s ip -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s ip -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s ip -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -s ip -p tcp --dport 20 -j ACCEPT

禁止指定IP訪問22|80|ftp21|ftp20端口,屏蔽某個網絡段:123.0.0.0/8|16|24
iptables -A INPUT -s ip -p tcp --dport 22 -j REJECT|DROP
iptables -A INPUT -s ip -p tcp --dport 80 -j REJECT|DROP
iptables -A INPUT -s ip -p tcp --dport 21 -j REJECT|DROP
iptables -A INPUT -s ip -p tcp --dport 20 -j REJECT|DROP

規則保存
service iptables save

查看防火墻規則:
iptables -L -n -v

iptables -S

刪除已添加的iptables規則

清空防火墻策略
iptabes -F

將所有iptables以序號標記顯示,執行:
iptables -L -n --line-numbers

Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 10.1.6.41 10.1.6.129 tcp dpt:22
2 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

比如要刪除INPUT裏序號為8的規則,執行:
iptables -D INPUT 2

控制規則的存放以及開啟
註意:你所定義的所有內容,當你重啟的時候都會失效,要想我們能夠生效,需要使用一個命令將它保存起來
1.service iptables save 命令
它會保存在/etc/sysconfig/iptables這個文件中
2.iptables-save 命令
iptables-save > /etc/sysconfig/iptables

3.iptables-restore 命令
開機的時候,它會自動加載/etc/sysconfig/iptabels
如果開機不能加載或者沒有加載,而你想讓一個自己寫的配置文件(假設為iptables.2)手動生效的話:
iptables-restore < /etc/sysconfig/iptables.2
則完成了將iptables中定義的規則手動生效

LINUX iptables規則學習筆記