iptables是針對Linux防火墻 netfilter的管理配置工具。在進行iptables防火墻設置前,必須打開系統(tǒng)內核的IP轉發(fā)功能,使系統(tǒng)成為路由器。在Red Hat中有以下兩種方法實現(xiàn):1.修改內核變量ip_forward#echo "1" > /proc/sys/net/ipv4/ip_froward2.修改腳本/etc/sysconfig/network將FROWARD_IPV4=false 改為 FROWARD_IPV4=true一、數(shù)據(jù)包流經(jīng)netfilter防火墻的路徑1.流入本機數(shù)據(jù)包的路徑:所屬表 mangle nat mangle nat filter 網(wǎng)絡數(shù)據(jù)包 à PREROUTING à PREROUTING à 路由選擇 à INPUT à INPUT à INPUT à 本地處理進程2.流出本機數(shù)據(jù)包的路徑:所屬表 mangle filter mangle nat 本地處理進程 à OUTPUT à OUTPUT à 路由選擇 à POSTROUTING à POSTROUTING à 外部網(wǎng)絡3.流經(jīng)本機轉發(fā)的數(shù)據(jù)包的路徑:所屬表 mangle nat mangle filter mangle nat A端網(wǎng)絡 à PREROUTING à PREROUTING à 路由選擇 à FORWARD à FORWARD à POSTROUTING à POSTROUTING à B端網(wǎng)絡注:①.路徑上某表鏈規(guī)則匹配數(shù)據(jù)包并進行ACCEPT、DROP、REJECT操作時,ACCEPT使數(shù)據(jù)包直接到達目的地,DROP和REJECT則當場丟棄數(shù)據(jù)包,該數(shù)據(jù)包不會在后續(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表 (網(wǎng)絡地址轉換表) ③.Mangle表 (數(shù)據(jù)包處理表)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 根據(jù)用戶給出的名字對指定的自定義鏈進行重命名,該命令不影響Table的結構。 -C 或--check 檢查給定的包是否與指定的規(guī)則相匹配。-Z 或--zero 將指定鏈中所有規(guī)則的數(shù)據(jù)包(PKTS)和字節(jié)(byte)計數(shù)器清零。該計數(shù)器用來計算同一數(shù)據(jù)包出現(xiàn)的次數(shù),是過濾阻斷式攻擊不可或缺的工具。-h 或--help 給出當前命令語法的簡短說明。3、鏈(Chains)①.INPUT鏈 處理輸入包的規(guī)則鏈。②.OUTPUT鏈 處理輸出包的規(guī)則鏈。③.FORWARD鏈 處理轉發(fā)包的規(guī)則鏈。④.PREROUTING鏈 對到達且未經(jīng)路由判斷之前的包進行處理的規(guī)則鏈。⑤.POSTROUTING鏈 對發(fā)出且經(jīng)過路由判斷之后的包進行處理的規(guī)則鏈。⑥.用戶自定義鏈 是由filter表內置鏈來調用的,它是針對調用鏈獲取的數(shù)據(jù)包進行處理的規(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ī)則的對內網(wǎng)絡接口名,默認則符合所有接口,可制定暫未工作的接口,待其工作后才起作用,該選項只對INPUT、FROWARD和PREROUTING鏈是合法的。-o 或—out-interface[!]interface name[+] 指定匹配規(guī)則的對外網(wǎng)絡接口名,默認則符合所有接口,可制定暫未工作的接口,待其工作后才起作用,該選項只對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ù)據(jù)包第二分片以后的分片。--tcp-option 這個選項后需接一個數(shù)字,用來匹配tcp選項等于該數(shù)字的數(shù)據(jù)包。如果需要檢查tcp選項,那些tcp表頭部完整的數(shù)據(jù)包就會被自動刪除。--tcp-flags 此選項后需接2個參數(shù),以對TCP標志進行篩選。第一個參數(shù)表示屏蔽(MASK),它可用來指定數(shù)據(jù)包中需要檢查的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ù)據(jù)包。-v 詳細輸出。-n 當顯示時,不對IP地址執(zhí)行DNS查找。[!] -y -y表明tcp握手中的連接請求標志位SYN;!-y表示對該請求的響應。[!]-syn 指定僅僅匹配設置了SYN位,清除了ACK、FIN位的TCP包,該參數(shù)僅針對TCP協(xié)議類型使用。-m -state 標記數(shù)據(jù)包。注:“!”為邏輯非;接口名后跟“+”表示所有以此接口名開頭的接口都會被匹配。附:匹配條件擴展: TCP-----匹配源端口,目的端口,及tcp標記的任意組合,tcp選項等。 UPD-----匹配源端口和目的端口 ICMP----匹配ICMP類型 MAC-----匹配接收到的數(shù)據(jù)的mac地址 MARK----匹配nfmark OWNE----(僅僅應用于本地產生的數(shù)據(jù)包)來匹配用戶ID,組ID,進程ID及會話ID TOS——匹配IP頭的TOS字段的值。 LIMIT---匹配特定時間段內的數(shù)據(jù)包。這個擴展匹配對于限制dos攻擊數(shù)據(jù)流非常有用。 STATE---匹配特定狀態(tài)下的數(shù)據(jù)包(由連接跟蹤子系統(tǒng)來決定狀態(tài)),可能的狀態(tài)包括: INVALID---不匹配于任何連接的數(shù)據(jù)包 ESTABLISHED--- 屬于某個已經(jīng)建立的連接的數(shù)據(jù)包 NEW--- 請求建立連接的數(shù)據(jù)包 RELATED---屬于某個已建立連接產生的新連接的數(shù)據(jù)包,例如一個ICMP錯誤消息或ftp數(shù)據(jù)連接 5、目標動作(Target) 當規(guī)則匹配一個包時,要執(zhí)行的目標動作以-j參數(shù)標識。 ①.Filter表的目標動作: ACCEPT 允許數(shù)據(jù)包通過。 DROP 丟棄數(shù)據(jù)包。 ②.Nat表的目標動作: SNAT 修改數(shù)據(jù)包的源地址。 MASQUERADE 修改數(shù)據(jù)包的源地址,只用于動態(tài)分配IP地址的情況。 DNAT 修改數(shù)據(jù)包的目標地址。 REDIRECT 將包重定向到進入系統(tǒng)時網(wǎng)絡接口的IP地址,目標端口改為指定端口。 ③.Mangle表的目標動作: TTL TOS 用來設置IP表頭中8位長度的TOS字段的值,此選項只在使用Mangle Tables時才有效。 MARK 對數(shù)據(jù)包進行標記,供其它規(guī)則或數(shù)據(jù)包處理程序使用,此選項只在Mangle表中使用。 ④.擴展的目標動作: REJECT 丟棄數(shù)據(jù)包的同時返回給發(fā)送者一個可配置的錯誤信息。 LOG 將匹配的數(shù)據(jù)包信息,傳遞給syslog()進行記錄。 ULOG 將匹配的數(shù)據(jù)包信息,使用用戶空間的log進程進行記錄。 MIRROR 互換源和目的地址以后重新傳輸該數(shù)據(jù)包。 TOS 改寫包的TOS值。 QUEUE 表示把這個包重導入本機的隊列中。 RETURN 表示跳離這條鏈的匹配,如果是用戶自定義鏈,就會返回原鏈的下一個規(guī)則處繼續(xù)檢查,如果是內置鏈,那會參考政策來處理數(shù)據(jù)包。 注:要使用擴展的目標動作,必須在內核中激活相應選項或裝載相應內核模塊。 四、iptables規(guī)則集的保存、恢復和啟動 1、保存與恢復 用iptables指令在內存中逐條建立起來的規(guī)則集,經(jīng)測試通過后,可用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守護進程。
|