一、防火牆,iptables和netfilter定義
防火牆:是由軟件和硬件設備組合而成的一種隔離技術,它工作於網絡或主機的邊緣(通信報文的進出口),對於進出本網絡或主機的數據包根據事先定義的檢測規則進行匹配檢測,允許或是限制傳輸的數據包通過。
netfilter :內核的一部分,內核中工作在tcp/ip網絡協議棧上的框架,由一些數據包過濾表組成,這些表包含內核用戶控制數據包過濾處理的規則集。
iptables : administration tool for IPv4 packet filtering
and NAT .用來插入、修改和刪除數據包過濾表中的規則的管理工具。定義的規則通過內核接口直接送至內核,立即生效,但不會永久有效,如果需要永久有效,需要保存至配置文件中,可以選擇開機加載(方法???)或者手動加載。
二、iptables 深入學習
iptables對於每一個chain,都是對其中的rule進行從上到下的匹配,一旦匹配則不再向下匹配,因此在添加rule時要注意-A和-I的差別,一個添加在首部,一個添加在尾部。
基本語法格式:
iptables [ –t 表名 ] 命令選項 [ 鏈名 ] [ 條件匹配 ] [ –j 目標動作或跳轉 ]
Tip:若不指定表名,默認使用filter表。iptables主要參數
-A 向規則鏈中添加一條規則,默認被添加到末尾
-t 指定要操作的表,默認是filter
-D 從規則鏈中刪除規則,可以指定序號或者匹配的規則來刪除
-R 進行規則替換
-I 插入一條規則,默認被插入到首部
-F 清空所選的鏈,重啟後恢復
-N 新建用戶自定義的規則鏈
-X 刪除用戶自定義的規則鏈
-p 用來指定協議可以是tcp,udp,icmp等也可以是數字的協議號,
-s 指定源地址
-d 指定目的地址
-i 進入接口
-o 流出接口
-j 采取的動作,accept,drop,snat,dnat,masquerade,reject
--sport 源端口
--dport 目的端口,端口必須和協議一起來配合使用
注意:所有鏈名必須大寫,表明必須小寫,動作必須大寫,匹配必須小寫簡單Iptables使用示例:
1. 在filter表的INPUT鏈末尾增加一條規則:
iptables -t filter -A INPUT -p tcp -j ACCEPT
2. 在filter表的INPUT鏈行首增加一條規則:
iptables –I INPUT –p udp –j ACCEPT ( 此處省略了“-t filter”選項,默認以filter處理)
3. 在filter表的INPUT鏈中插入一條防火牆規則,做為鏈的第二條規則:
iptables –I INPUT 2 –p icmp –j ACCEPT
4. 查看filter表INPUT鏈中的所有規則,同時顯示規則的序號:
iptables –L INPUT –line-numbers
5. 刪除filter表INPUT鏈中第2條規則:
iptables –D INPUT 2
6. 清空filter、nat、mangle表各鏈中的所有規則:
iptables –F
iptables –t nat –F
iptables –t mangle –F
7. 設置filter表FORWARD規則鏈的默認策略為DROP
iptables –P FORWARD DROP
條件匹配示例:
1. 協議匹配:如拒絕進入防火牆的所有icmp協議數據包
iptables –I INPUT –p icmp –j REJECT
允許轉發除icmp協議以外的所有數據(使用!可以將條件取反)
iptables –A FORWARD ! –p icmp –j ACCEPT
2. 地址匹配:(”-s 源地址”/ “-d 目標地址”)
拒絕轉發來自192.168.1.1主機的數據
iptables –A FORWARD –s 192.168.1.1 –j REJECT
3. 網絡接口匹配:(“-i 網絡接口名”/ “-o 網絡接口名”分別對應接收數據包的網卡和發送數據包的網卡)
丟棄從外網接口eth1進入防火牆本機的源地址為私網地址的數據包
iptables –A INPUT –i eth1 –s 192.168.0.0/16 –j DROP
iptables –A INPUT –i eth1 –s 172.16.0.0/12 –j DROP (這裡運用了子網匯總)
iptables –A INPUT –i eth1 –s 10.0.0.0/8 –j DROP
4. 端口匹配:用於檢查數據包的TCP或UDP端口號,需要以“-p tcp”或“-p udp”匹配為前提,使用“--sport 源端口”、“--dport 目標端口”的形式。端口可以表示為單個端口號或者用冒號分割的端口范圍。
僅允許管理員從192.168.1.0/24網段使用SSH方式遠程登錄防火牆主機
iptables –A INPUT –p tcp –dport 22 –s 192.168.1.0/24 –j ACCEPT
iptables –A INPUT –p tcp –dport 22 –j DROP
5. TCP標記匹配:在Iptables命令中使用“--tcp-flags 檢查范圍 被設置的標記”的形式,兩個參數“檢查范圍”和“被設置的標記”均為TCP標記的列表,各標記之間以逗號分割。“檢查范圍”告訴Iptables需要檢查數據包的哪幾個標記,“被設置
的標記”則明確匹配對應只為1的標記。【SYN(同步)、ACK(應答)、FIN(結束)、RST(重設)、URG(緊急)、PSH(強迫推送)等均可使用於參數中,除此之外還可以使用關鍵詞 ALL 和 NONE 進行比對】
拒絕從外網接口eth1直接訪問防火牆本機的數據包,但是允許響應防火牆TCP請求的數據包進入;
iptables –P INPUT DROP
iptables –I INPUT –i eth1 –p tcp --tcp-flags SYN,RST,ACK SYN –j REJECT
iptables -I INPUT -i eth1 -p tcp ! --syn -j ACCEPT
(注:--syn同等於:--tcp-flags SYN,RST,ACK,FIN SYN,詳情可以man iptables)
6. ICMP類型匹配:ICMP類型可以使用字符串或數字代碼,例如“Echo-Request”(數字代碼為8),“Echo-Reply”(數字代碼為0),“Destination-Unreachable”(數字代碼為3),分別對應ICMP協議的請求、回顯、目標不可達數據。
禁止其它主機ping防火牆主機,但是允許防火牆ping其它主機(允許接收ICMP回應數據)。
iptables -A INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type Destination-Unreachable -j ACCEPT
7. 顯示條件匹配:這種匹配功能需要額外的內核模塊提供,因此需要手工指定匹配方式,在Iptables命令中使用“-m 模塊關鍵字”的形式調用顯示匹配,當然還需要指定匹配內容。
a. MAC地址匹配:例如禁止轉發來自MAC地址為00:01:12:AA:3F:DD的主機數據包
iptables –A FORWARD –m mac –mac-source 00:01:12:AA:3F:DD –j DROP
b. 多端口匹配:Iptables中使用“—dports 端口列表”,“—sports 端口列表”的形式對應源端口地址列表、目標端口地址列表。
允許防火牆本機開放TCP端口20、21、25、110及被動模式FTP端口1250~1280
iptables –A INPUT –p tcp –m multiport –dports 20,21,25,110,1250:1280 –j ACCEPT
c. 多IP地址匹配:Iptables中使用“--src-range IP地址范圍”“--dst-range IP地址范圍”的形式對應源IP地址范圍、目標IP地址范圍。
禁止轉發IP地址為192.168.1.1~192.168.1.10的TCP數據包
iptables –A FORWARD –p tcp –m iprange –src-range 192.168.1.1-192.168.1.10 –j DROP
d. 狀態匹配:常見的數據包狀態包括NEW(與任何連接無關的)、ESTABLISHED(響應請求或已建立連接的)和RELATED(與已有連接相關的)
禁止轉發與正常TCP連接無關的非--syn請求數據包(如網絡中存在一些非法攻擊數據包)
iptables –A FORWARD –m state –state NEW –p tcp ! –syn –j DROP
防火牆規則的導入、導出
直接執行iptables-save命令時,會把當前設置的防火牆規則信息輸出到終端。通常情況下,可以使用重定向將信息保存為指定的配置文件,結合系統默認提供的Iptables服務腳本,可以自動加載位置於/etc/sysconfig/iptables文件中的規則配置。
使用iptables-restore命令,可以從已保存的配置文件中導入Iptables規則(該文件必須是使用Iptables-save命令導出的配置數據)。
本文出自 “貴在堅持_IT博客”
博客,請務必保留此出處http://fdgui.blog.51cto.com/3484207/1437643