iptables是針對Linux防火墻 netfilter的管理配置工具。在進行iptables防火墻設置前,必須打開系統(tǒng)內核的IP轉發(fā)功能,使系統(tǒng)成為路由器。在Red Hat中有以下兩種方法實現(xiàn):
1.修改內核變量ip_forward
#echo "1" > /proc/sys/net/ipv4/ip_froward
2.修改腳本/etc/sysconfig/network
將FROWARD_IPV4=false 改為 FROWARD_IPV4=true
一、數(shù)據包流經netfilter防火墻的路徑
1.流入本機數(shù)據包的路徑:
所屬表 mangle nat mangle nat filter
網絡數(shù)據包 à PREROUTING à PREROUTING à 路由選擇 à INPUT à INPUT à INPUT à 本地處理進程
2.流出本機數(shù)據包的路徑:
所屬表 mangle filter mangle nat
本地處理進程 à OUTPUT à OUTPUT à 路由選擇 à POSTROUTING à POSTROUTING à 外部網絡
3.流經本機轉發(fā)的數(shù)據包的路徑:
所屬表 mangle nat mangle filter mangle nat
A端網絡 à PREROUTING à PREROUTING à 路由選擇 à FORWARD à FORWARD à POSTROUTING à POSTROUTING à B端網絡
注:①.路徑上某表鏈規(guī)則匹配數(shù)據包并進行ACCEPT、DROP、REJECT操作時,ACCEPT使數(shù)據包直接到達目的地,DROP和REJECT則當場丟棄數(shù)據包,該數(shù)據包不會在后續(xù)路徑上再出現(xiàn),故會影響其它表的操作。
②.PREROUTING和POSTROUTING鏈只對請求連接的包進行操作,對屬于該連接的后續(xù)包,不予比對規(guī)則,只按已確定的規(guī)則自動進行操作,因此建議不要在此鏈上作過濾操作,否則將漏掉對后續(xù)包的過濾。
二、iptables指令的基本格式:
<iptables> [-t table] < COMMAND> [chains] [rule-matcher] [ -j target ]
<指令> [指定表] <指定操作命令> [指定鏈] [指定匹配規(guī)則] [指定目標動作]
注:<>括起來的為必設項,[]括起來的為可設項。iptables指令要求嚴格區(qū)分大小寫!
三、iptables指令的語法規(guī)則要素:
1、netfilter表(Table)
netfilter的表操作是以-t或--table<table>來指定的,未指定時默認為filte表。共有以下三種表:
①.Filter表 (過濾表)
②.Nat表 (網絡地址轉換表)
③.Mangle表 (數(shù)據包處理表)
2、常用操作命令(Command)
-A 或--append 在所選的鏈尾加入一條或多條規(guī)則。
-D 或--delete 從所選的鏈中刪除一條或多條匹配的規(guī)則。
-R 或--replace 在所選的鏈中替換一條匹配的規(guī)則,需指定規(guī)則中的數(shù)字。
-I 或--insert 按給出的規(guī)則號在所選的鏈中插入一條規(guī)則。
-L 或--list 列出指定鏈的全部規(guī)則,如未指定鏈,則列出所有鏈的全部規(guī)則。
-F 或--flush 清除指定鏈和表中的全部規(guī)則,如未指定鏈,則所有鏈都將被清。
-N 或--new-chain 以給定的名字創(chuàng)建一條新的用戶自定義鏈,不能與已有的鏈同名。
-X 或--delete-chain 刪除指定的用戶自定義鏈,必須保證鏈中的規(guī)則不在使用才能刪除,若未指定鏈,則刪除所有用戶自定義鏈。
-P 或--policy 為內置鏈指定默認規(guī)則(鏈政策)。用戶自定義鏈沒有默認規(guī)則,其默認規(guī)則是規(guī)則鏈中的最后一條規(guī)則,用-L命令時它顯示在第一行。
-E 或--rename-chain 根據用戶給出的名字對指定的自定義鏈進行重命名,該命令不影響Table的結構。
-C 或--check 檢查給定的包是否與指定的規(guī)則相匹配。
-Z 或--zero 將指定鏈中所有規(guī)則的數(shù)據包(PKTS)和字節(jié)(byte)計數(shù)器清零。該計數(shù)器用來計算同一數(shù)據包出現(xiàn)的次數(shù),是過濾阻斷式攻擊不可或缺的工具。
-h 或--help 給出當前命令語法的簡短說明。
3、鏈(Chains)
①.INPUT鏈 處理輸入包的規(guī)則鏈。
②.OUTPUT鏈 處理輸出包的規(guī)則鏈。
③.FORWARD鏈 處理轉發(fā)包的規(guī)則鏈。
④.PREROUTING鏈 對到達且未經路由判斷之前的包進行處理的規(guī)則鏈。
⑤.POSTROUTING鏈 對發(fā)出且經過路由判斷之后的包進行處理的規(guī)則鏈。
⑥.用戶自定義鏈 是由filter表內置鏈來調用的,它是針對調用鏈獲取的數(shù)據包進行處理的規(guī)則鏈。
注:①.Filter表有INPUT、OUTPUT、FORWARD和自定義四種鏈形式。
②.Nat表有OUTPUT、PREROUTING、POSTROUTING三種鏈形式。
③.Mangle表有INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING五種鏈形式。
4、常用匹配規(guī)則(rule Matcher)
-c或--set-counters 重新設置規(guī)則的計數(shù)器,可指定PKTS和BYTES選項來設置計數(shù)器計數(shù)規(guī)則。
-s 或--source [!] address[/mask] 指定匹配規(guī)則的源主機名稱、源IP地址或源IP地址范圍。
--sport 或--source-port [!] port[:port] 指定匹配規(guī)則的源端口或源端口范圍,可用端口號,也可用/etc/services文件中的名字, 端口范圍格式xxx:yyy。
-d 或--destination [!]address[/mask] 指定匹配規(guī)則的目的地址或目的地址范圍。
--dport 或--destination-port [!] port[:port] 指定匹配規(guī)則的目的端口或目的端口范圍,可用端口號,也可用/etc/services文件中的名字, 端口范圍格式xxx:yyy。
-i 或--in-interface [!]interface name[+] 指定匹配規(guī)則的對內網絡接口名,默認則符合所有接口,可制定暫未工作的接口,待其工作后才起作用,該選項只對INPUT、FROWARD和PREROUTING鏈是合法的。
-o 或—out-interface[!]interface name[+] 指定匹配規(guī)則的對外網絡接口名,默認則符合所有接口,可制定暫未工作的接口,待其工作后才起作用,該選項只對OUTPUT、FROWARD和POSTROUTING鏈是合法的。
-j 或--jump 指定規(guī)則的目標即動作或跳轉,如未指定則此規(guī)則無任何效果。
-p 或--protocol [!] protocol 指定匹配規(guī)則的通訊協(xié)議,如:tcp、udp、icmp、all,如未指定則匹配所有通訊協(xié)議。
--icmp-type [!]typename 指定匹配規(guī)則的ICMP消息類型,選項后需有一個icmp名稱類型、數(shù)字類型(如3)、或一對用/號分隔的數(shù)字類型和編碼(如3/3),可用以下命令查看有效的icmp類型名表: iptables -p icmp -h
-f 規(guī)則應用于IP數(shù)據包第二分片以后的分片。
--tcp-option 這個選項后需接一個數(shù)字,用來匹配tcp選項等于該數(shù)字的數(shù)據包。如果需要檢查tcp選項,那些tcp表頭部完整的數(shù)據包就會被自動刪除。
--tcp-flags 此選項后需接2個參數(shù),以對TCP標志進行篩選。第一個參數(shù)表示屏蔽(MASK),它可用來指定數(shù)據包中需要檢查的TCP標志,而第二個參數(shù)表示需要設置的標準,可用的標志包括:SYN、ACK、FIN、RST、URG、PSH、ALL和NONE等,如果指定多個標志,則每個標志間需以逗號分隔。以下范例表示所有標志都要檢查,但只有SYN和ACK被設置。
例:iptables –A INPUT –protocol tcp –tcp-flags ALL SYN,ACK –j DENY
-l 在系統(tǒng)日志/var/log/messages中記錄與該規(guī)則匹配的數(shù)據包。
-v 詳細輸出。
-n 當顯示時,不對IP地址執(zhí)行DNS查找。
[!] -y -y表明tcp握手中的連接請求標志位SYN;!-y表示對該請求的響應。
[!]-syn 指定僅僅匹配設置了SYN位,清除了ACK、FIN位的TCP包,該參數(shù)僅針對TCP協(xié)議類型使用。
-m -state 標記數(shù)據包。
注:“!”為邏輯非;接口名后跟“+”表示所有以此接口名開頭的接口都會被匹配。
附:匹配條件擴展:
TCP-----匹配源端口,目的端口,及tcp標記的任意組合,tcp選項等。
UPD-----匹配源端口和目的端口
ICMP----匹配ICMP類型 MAC-----匹配接收到的數(shù)據的mac地址 MARK----匹配nfmark OWNE----(僅僅應用于本地產生的數(shù)據包)來匹配用戶ID,組ID,進程ID及會話ID TOS——匹配IP頭的TOS字段的值。 LIMIT---匹配特定時間段內的數(shù)據包。這個擴展匹配對于限制dos攻擊數(shù)據流非常有用。 STATE---匹配特定狀態(tài)下的數(shù)據包(由連接跟蹤子系統(tǒng)來決定狀態(tài)),可能的狀態(tài)包括: INVALID---不匹配于任何連接的數(shù)據包 ESTABLISHED--- 屬于某個已經建立的連接的數(shù)據包 NEW--- 請求建立連接的數(shù)據包 RELATED---屬于某個已建立連接產生的新連接的數(shù)據包,例如一個ICMP錯誤消息或ftp數(shù)據連接 5、目標動作(Target)
當規(guī)則匹配一個包時,要執(zhí)行的目標動作以-j參數(shù)標識。
①.Filter表的目標動作:
ACCEPT 允許數(shù)據包通過。
DROP 丟棄數(shù)據包。
②.Nat表的目標動作:
SNAT 修改數(shù)據包的源地址。
MASQUERADE 修改數(shù)據包的源地址,只用于動態(tài)分配IP地址的情況。
DNAT 修改數(shù)據包的目標地址。
REDIRECT 將包重定向到進入系統(tǒng)時網絡接口的IP地址,目標端口改為指定端口。
③.Mangle表的目標動作:
TTL
TOS 用來設置IP表頭中8位長度的TOS字段的值,此選項只在使用Mangle Tables時才有效。
MARK 對數(shù)據包進行標記,供其它規(guī)則或數(shù)據包處理程序使用,此選項只在Mangle表中使用。
④.擴展的目標動作:
REJECT 丟棄數(shù)據包的同時返回給發(fā)送者一個可配置的錯誤信息。
LOG 將匹配的數(shù)據包信息,傳遞給syslog()進行記錄。
ULOG 將匹配的數(shù)據包信息,使用用戶空間的log進程進行記錄。
MIRROR 互換源和目的地址以后重新傳輸該數(shù)據包。
TOS 改寫包的TOS值。
QUEUE 表示把這個包重導入本機的隊列中。
RETURN 表示跳離這條鏈的匹配,如果是用戶自定義鏈,就會返回原鏈的下一個規(guī)則處繼續(xù)檢查,如果是內置鏈,那會參考政策來處理數(shù)據包。
注:要使用擴展的目標動作,必須在內核中激活相應選項或裝載相應內核模塊。
四、iptables規(guī)則集的保存、恢復和啟動
1、保存與恢復
用iptables指令在內存中逐條建立起來的規(guī)則集,經測試通過后,可用iptables-save命令保存,其中/etc/sysconfig/iptables是iptables守護進程調用的默認規(guī)則集文件。
保存規(guī)則集命令:
#/sbin/iptables-save > /etc/sysconfig/iptables
恢復規(guī)則集命令:
#/sbin/iptables-restore < /etc/sysconfig/iptables
2、iptables規(guī)則集腳本的啟動
①.默認腳本的啟動
Red Hat iptables的啟動腳本文件/etc/rc.d/init.d/iptables在每次啟動時都要使用/etc/sysconfig/iptables提供的規(guī)則進行規(guī)則恢復,并可以使用如下命令保存規(guī)則:
#service iptables save
②.自定義腳本的啟動
用戶可以在自定義腳本中直接用iptables命令編寫一個規(guī)則集,并在啟動時執(zhí)行這個腳本。設用戶自定義腳本文件名為/etc/fw/rules,則可以在啟動腳本/etc/rc.d/rc.local中加入代碼:if[-x/etc/fw/rules];then /etc/fw/rules;fi;即可在每次啟動時執(zhí)行該腳本。
注:如果使用此種方式,建議使用ntsysv命令關閉系統(tǒng)的iptables守護進程。
|