本文轉載自 http://6509e.blog.51cto.com/542252/124312
IPTABLES
Iptables 基礎,規(guī)則、鏈、表
規(guī)則:就是網絡管理員預定義的條件,規(guī)則一般定義為“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個數(shù)據(jù)包”。規(guī)則存儲在內核空間的信息包過濾表中,這些規(guī)則分別定義了源地址、目的地址、傳輸協(xié)議(如TCP,UDP,ICMP)和服務類型(HTTP,FTP,SMTP)等,當數(shù)據(jù)包與規(guī)則匹配時,iptables就根據(jù)規(guī)則所定義的方法來處理這些數(shù)據(jù)包,如放行(accept),拒絕(reject),和丟棄(drop)等。配置防火墻主要工作就是添加,修改和刪除這些規(guī)則。
鏈:鏈(CHAINS)是數(shù)據(jù)包傳播的途徑,每一條鏈其實就是眾多規(guī)則中的一個檢查清單,每一條鏈可以有一條或數(shù)條規(guī)則。當一個數(shù)據(jù)包到達一條鏈時,iptables就從鏈中第一條規(guī)則開始檢查,看該數(shù)據(jù)包是否滿足規(guī)則定義的條件。如果滿足,系統(tǒng)就會根據(jù)這條規(guī)則所定義的方法處理該數(shù)據(jù)包;否則iptables將繼續(xù)檢查下一條規(guī)則,如果該數(shù)據(jù)包不符合鏈中任一條規(guī)則,iptables將會按照默認策略來處理數(shù)據(jù)包。
表:表(tables)提供了特定的功能,iptables內建了3個表,即filter表、nat表、和mangle表。分別用于實現(xiàn)包過濾,網絡地址轉換和包重構的功能
Filter表
Filter表主要是用于過濾數(shù)據(jù)包,是iptables的默認表,包含了INPUT鏈(用于處理進入的數(shù)據(jù)包),FORWORD鏈(處理轉發(fā)的數(shù)據(jù)包),OUTPUT鏈(處理本地生成的數(shù)據(jù)包)。在filter表中只允許對數(shù)據(jù)包進行接受、丟棄操作,而無法對數(shù)據(jù)包進行修改。
Nat表
Nat表主要用于網絡地址轉換,可以實現(xiàn)一對一,一對多,多對多等NAT工作,包含了PREROUTING鏈(修改即將到來的數(shù)據(jù)包),OUTPUT鏈(修改路由之前本地生成的數(shù)據(jù)包)和POSTROUTING(修改即將出去的數(shù)據(jù)包)。
Mangle表
Mangle表主要用于對指定包進行修改,如TTL,TOS等。用的很少。
IPTABLES傳輸數(shù)據(jù)包的過程
1、 當一個數(shù)據(jù)包進入網卡時,他首先進入PREROUTING鏈,內核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉發(fā)出去。
2、 如果數(shù)據(jù)包是進入本機的,就會向下到INPUT鏈。數(shù)據(jù)包到達INPUT鏈后,任何進程都會接受。本機上運行的程序也可以發(fā)出數(shù)據(jù)包,這些數(shù)據(jù)包會經過OUTPUT鏈,然后到達POSTROUTING鏈輸出。
3、 如果數(shù)據(jù)包是要轉發(fā)出去的,且內核允許,數(shù)據(jù)包就會經過FORWARD鏈,然后到POSTROUTING鏈輸出。
用戶可以在各個鏈定義規(guī)則。
Iptables命令格式:
iptables [-t 表] –命令 匹配 動作
1、 表選項:filter表,nat表和mangle表
2、 命令選項,用于指定執(zhí)行方式,包括插入規(guī)則、刪除規(guī)則、添加規(guī)則等。
-P或者—policy 定義默認策略
-L或者--list 查看iptables規(guī)則列表
-A或者--append 在規(guī)則列表最后面添加1條規(guī)則
-I或者--insert 在指定位置插入1條規(guī)則
-D或者--delete 從規(guī)則列表中刪除1條規(guī)則
-R或者--replace 替換規(guī)則列表中的某條規(guī)則
-F或者--flush 刪除表中所有規(guī)則
-Z或者--zero 將表中數(shù)據(jù)包計數(shù)器和流量計數(shù)器清零
3、匹配選項,匹配指定數(shù)據(jù)包與規(guī)則匹配所具有的特征,包括源地址、目的地址、傳輸協(xié)議和端口號
-i或者—in-interface <網絡接口名稱> 指定數(shù)據(jù)包從哪個網絡接口進入,如ppp0,eth0
-o或者—out-interface <網絡接口名稱> 指定數(shù)據(jù)包從哪個網絡接口流出
-p或者—proto <協(xié)議類型> 指定數(shù)據(jù)包匹配的協(xié)議tcp,udp,icmp等
-s或者—source <源地址或子網> 指定數(shù)據(jù)包匹配的源地址
--sport <源端口號> 指定數(shù)據(jù)包匹配的源端口號
-d或者—destination <目的地址或者子網>
--dport <目標端口號>
4、動作選項,指定當數(shù)據(jù)包與規(guī)則匹配時,應該做什么操作,如接口,丟棄等
ACCEPT 接受數(shù)據(jù)包
DROP 丟棄數(shù)據(jù)包
REDIRECT 將數(shù)據(jù)包重新轉向到本機或另外一臺主機的某個端口
SNAT 源地址轉換
DNAT 目的地址轉換
MASQUERADE IP偽裝,即NAT技術
LOG 日至功能,將符合規(guī)則的數(shù)據(jù)包的相關信息記錄在日至中
Iptables的使用
1、 定義默認策略
iptables [-t 表名] <-P> <鏈名> <動作>
例如:iptables –P INPUT ACCEPT 定義filter表INPUT鏈默認策略接受所有數(shù)據(jù)包
iptables –t nat –P OUTPUT DROP 將nat表OUTPUT鏈默認策率丟棄所有數(shù)據(jù)包
技巧,定義默認規(guī)則拒絕所有
iptables –P INPUT DROP
iptables –P FORWARD DROP
iptables –P OUTPUT ACCEPT
2、 查看iptables 規(guī)則
iptables [-t 表名] <-L> [鏈名]
例如查看nat表所有鏈的規(guī)則列表
Iptables –t nat –L
3、 增加、插入、刪除和替換規(guī)則
Iptables [-t 表名] <-A 或I或 D或 R> 鏈名 [規(guī)則編號] [-i或 o 網卡名稱 ] [-p 協(xié)議類型] [-s 源地址或子網] [--sport 源端口號] [-d目的IP地址或子網] [--dport 目的端口號] <-j 動作>
例如為filter表INPUT鏈添加1條規(guī)則
iptables –t filter –A INPUT –s 192.168.1.200 –j DROP
例如在filter表INPUT鏈規(guī)則列表中第2條規(guī)則前插入1條規(guī)則
iptables –t filter –I INPUT 2 –s 192.168.2.0/24 –p tcp –dport 80 –j DROP
例如刪除filter表INPUT鏈規(guī)則列表中第3條規(guī)則
iptables –t filter –D INPUT 3
使用iptables實現(xiàn)NAT
首先要開啟內核路由功能:
echo “1”> /proc/sys/net/ipv4/ip_forward
然后實現(xiàn)IP偽裝,在nat表中的POSTROUTING鏈加入一條規(guī)則,這條規(guī)則是將所有由ppp0口送出的包偽裝。
iptables –t nat –A POSTROUTING –o PPP0 –j MASQUERADE
查看規(guī)則雖然可以用iptables -L 來查看,但是信息并不完全,所以還是用cat /etc/sysconfig/iptables 來查看
注意:每次添加或者刪除規(guī)則后,要service iptables save |