from: http://www.cnblogs.com/yi-meng/p/3213925.html
備注: 排版還不錯,建議看以上的鏈接。
iptables規則
規則--顧名思義就是規矩和原則,和現實生活中的事情是一樣的,國有國法,家有家規,所以要遵紀守法的嘛。當然在防火牆上的規則,在內核看來,規則就是決定如何處理一個包的語句。如果一個包符合所有的條件,我們就用相應的處理動作來處理。書寫規則的語法格式為:
iptables [-t table] command chains [creteria] -j action
-t table就是表名,filter/nat/mangle三個表中的一個,默認是filter表
command告訴程序如何做,比如:插入一個規則,還是刪除等
chains 鏈,有五個,PREROUTING POSTROUTING INPUT OUTPUT FORWARD
action 處理動作,有ACCEPT DENY DROP REJECT SNAT DNAT
理一下思路

下面一點點的說
一、Tables
選項-t用來指定用哪個表,它可以是下面的任何一個,默認的是filter表

二、COMMANDS
command指定iptables對我們提交的規則要做什么樣的操作。這些操作可能是在某個表里增加或刪除一些東西,或其他的動作。一下是iptables可用的command(如不做說明,默認表是filter)

和命令結合常用的選項

三、chains
簡單說一下五個鏈的作用:
PREROUTING 是在包進入防火牆之后、路由決策之前做處理
POSTROUTING 是在路由決策之后,做處理
INPUT 在包被路由到本地之后,但在出去用戶控件之前做處理
OUTPUT在去頂包的目的之前做處理
FORWARD在最初的路由決策之后,做轉發處理
四、匹配條件
4.1 基本匹配

4.2 隱含擴展匹配
這種匹配操作是自動的或隱含的裝入內核的。例如使用-p tcp時,不需要再裝入任何東西就可以匹配只有IP包才有的特點。隱含匹配針對三種不同的協議,即TCP UDP ICMP。它們分別有一套適用於相應協議的判斷標准
TCP匹配 只能匹配TCP包的細節,必須有-p tcp作為前提
--sport port 基於TCP包的源端口來匹配包
--dport port 基於TCP包的目的端口來匹配包
--tcp-flags tcp標志位 有兩個參數列表。第一個是指定要檢查的標識位;第二個是指定為1的標識位
UDP匹配
--sprot port
--dport port
ICMP匹配
--icmp-type
8 request 請求
0 reply 回復 響應
參考:http://www.cnblogs.com/itech/archive/2011/08/23/2150445.html
一、Netfilter規則表—filter nat mangle
filter,用於路由網絡數據包。是默認的,也就是說如果沒有指定-t參數,當創建一條新規則時,它會默認存放到該表內。
INPUT 網絡數據包流向服務器
OUTPUT 網絡數據包從服務器流出
FORWARD 網絡數據包經服務器路由
nat,用於NAT表.NAT(Net Address Translation )是一種IP地址轉換方法。
PREROUTING 網絡數據包到達服務器時可以被修改
OUTPUT 網絡數據包由服務器流出
POSTROUTING 網絡數據包在即將從服務器發出時可以被修改
mangle,用於修改網絡數據包的表,如TOS(Type Of Service),TTL(Time To Live),等
INPUT 網絡數據包流向服務器
OUTPUT 網絡數據包流出服務器
FORWARD 網絡數據包經由服務器轉發
PREROUTING 網絡數據包到達服務器時可以被修改
POSTROUTING 網絡數據包在即將從服務器發出時可以被修改
1.配置Iptables
當數據包進入服務器時,Linux Kernel會查找對應的鏈,直到找到一條規則與數據包匹配。如果該規則的target是ACCEPT,就會跳過剩下的規則,數據包會被繼續發送。如果該 規則的target是DROP,該數據包會被攔截掉,kernel不會再參考其他規則。
Note:如果從始至終都沒有一條規則與數據包匹配,而且表末尾又沒有drop all的規則,那末該數據包會被accept。Cisco則相反,在表末尾會因含deny all的規則。
iptables [-t tables] command option parameter target
-A 在鏈尾添加一條規則
-C 將規則添加到用戶定義鏈之前對其進行檢查
-D 從鏈中刪除一條規則
-E 重命名用戶定義的鏈,不改變鏈本身
-F 清空鏈,刪除鏈上的所有規則-I 在鏈中插入一條規則
-L 列出某個鏈上的規則,如iptables –L INPUT 列出INPUT鏈的規則
-N 創建一個新鏈
-P 定義某個鏈的默認策略
-R 替換鏈上的某條規則
-X 刪除某個用戶相關的鏈
-Z 將所有表的所有鏈的字節和數據包計數器清零
2.) Iptables的命令參數
-p -–protocol
應用於數據包的協議類型,可以是TCP UDP ICMP或ALL。!也可使用。
當使用-p tcp時,還可使用其他可以選項,以便允許進一步定義規則。選項包括:
--sport 允許指定匹配數據包源端口.port1:port ,表示port1和port2之間的所有端口
--dport 目的端口,和--sport雷同。
當使用-p !udp時,也有特殊的選項供使包括:
--sport,--dport,與-p tcp 相同,只不過用以用於UDP包。
使用-p icmp參數時,只有一個選項可用。
--icmp-type,允許在過濾規則中指定icmp類型。
-s –-source 指定數據包的源地址。該參數后跟一個IP地址,一個帶有sub-net mask的網絡地址,或一個主機名。(不建議使用主機名)
-d,--destination 數據包的目的地址,同-s.
-j,--jump 用於指定一個target,告訴規則將該匹配的數據包發送到該 target。Target可以是ACCEPT,DROP,QUEUE,RETURN.如果沒有-j,那么不會對數據包進行任何操作,只是將計數器加1。
-o --out-interface,對於OUTPUT FORWARD POSTROUTING鏈,該參數指定數據包離開服務器時使用的端口。
3.) Iptables的命令target
創建規則的最后一步是指定Iptables對數據包的操作。只要某一規則匹配該數據包,就不會再有別的規則的操作。內建的target有:ACCEPT DROP QUEUE RETURN。
ACCEPT:允許數據包通過,到達目的地。DROP:拒絕數據包通過,丟棄該包。
QUEUE:將數據包發送回到用戶應用程序處理。
RETURN:不再根據當前鏈的其他規則來檢查數據包,而是直接返回,繼續被發送到其目的地址,或下一個鏈。
2.應用Iptables規則示例
允許WWW
iptables –A INPUT –p tcp –dport 80 –j ACCEPT
該規則被添加到filter表的INPUT鏈,允許目的端口是80的數據包。
在內部接口上允許DHCP
iptables –A INPUT –i eth0 –p tcp - - sport 68 - -dport 67 ACCEPT
iptables –A INPUT –i eth0 –p ucp - -sport 68 - -dport 67 ACCEPT
以上同時允許TCP和UDP協議。
3.保存和恢復Iptables
保存Iptables
使用iptables-save可將現行的iptables規則保存,
iptables-save > iptables保存路徑,如# iptables-save > /etc/iptables.up.rule
恢復Iptables
使用iptables-restore 可從配置文檔恢復iptables表到現行iptables表.
iptables-restore < /etc/iptables.up.rule
二、Ubuntu Server中的Iptables
Ubuntu Server6.06中已經默認安裝iptables,版本是1.3.3.默認狀態是關閉。
通過修改/etc/network/interfaces可將iptables打開:
auto lo
Iface lo inet loopback
auto eth0
iface eth0 inet dhcp
#添加以下內容
pre-up iptables-restore < /etc/iptables.up.rule
#call the restored rule when active the eth0
post-down iptables-save > /etc/iptables.up.rule
#restore the iptables rule when shutdown the interface eth0
然后重新激活eth0即可。
另外,可隨時修改/etc/iptables.up.rule配置文件,來更改iptables的規則。Iptables.up.rule格式如下:
#Generated by iptables-save V1.3.3 on Tue Jul 31 14:18:44 2007
*filter
:INPUT ACCEPT [73:8213]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [8:825]
-A INPUT –i lo –p icmp –j DROP
-A INPUT –i eth0 –p icmp –j DROP
COMMIT
#Completed on Tue Jul 31 14:10:44 2007
行與行之間不能有空行。
三.Summary
iptables表鏈中每條規則的順序很重要,如果首條是accept all,那末所有的數據包都會被允許通過firewall,因此應當適當的安排規則順序。
通常的法則是:拒絕所有 允許少數.
參考:http://blog.chinaunix.net/uid-20520466-id-1655741.html
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
可以看出我在安裝linux時,選擇了有防火牆,並且開放了22,80,25端口.
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
[root@tp ~]# iptables -X 清除預設表filter中使用者自定鏈中的規則
Chain INPUT (policy ACCEPT)
target prot opt source destination
target prot opt source destination
target prot opt source destination
上面的意思是,當超出了IPTABLES里filter表里的兩個鏈規則(INPUT,FORWARD)時,不在這兩個規則里的數據包怎么處理呢,那就是DROP(放棄).應該說這樣配置是很安全的.我們要控制流入數據包
如果做了郵件服務器,開啟25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果做了FTP服務器,開啟21端口
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
target prot opt source destination
SNAT all -- 192.168.0.0/24 anywhere to:211.101.46.235
target prot opt source destination
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
如果我們想,比如阻止MSN,QQ,BT等的話,需要找到它們所用的端口或者IP,(個人認為沒有太大必要)
[root@tp ~]# iptables -A INPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables -A OUTPUT -m state --state INVALID -j DROP
[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP
允許所有已經建立的和相關的連接
[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# /etc/rc.d/init.d/iptables save
這樣就可以寫到/etc/sysconfig/iptables文件里了.寫入后記得把防火牆重起一下,才能起作用.
[root@tp ~]# service iptables restart
別忘了保存,不行就寫一部保存一次.你可以一邊保存,一邊做實驗,看看是否達到你的要求,
Linux防火牆介紹
摘 要: 本文介紹了LINUX下常用的防火牆規則配置軟件Iptables;從實現原理、配置方法以及功能特點的角度描述了LINUX防火牆的功能
關鍵字: LINUX防火牆 Iptables Ipchains 包過濾
一 前言:
Linux 為增加系統安全性提供了防火牆保護。防火牆存在於你的計算機和網絡之間,用來判定網絡中的遠程用戶有權訪問你的計算機上的哪些資源。一個正確配置的防火牆可以極大地增加你的系統安全性。防火牆作為網絡安全措施中的一個重要組成部分,一直受到人們的普遍關注。LINUX是這幾年一款異軍突起的操作系統,以其公開的源代碼、強大穩定的網絡功能和大量的免費資源受到業界的普遍贊揚。LINUX防火牆其實是操作系統本身所自帶的一個功能模塊。通過安裝特定的防火牆內核,LINUX操作系統會對接收到的數據包按一定的策略進行處理。而用戶所要做的,就是使用特定的配置軟件(如iptables)去定制適合自己的“數據包處理策略”。
二 防火牆 包過濾:對數據包進行過濾可以說是任何防火牆所具備的最基本的功能,而LINUX防火牆本身從某個角度也可以說是一種“包過濾防火牆”。在LINUX防火牆中,操作系統內核對到來的每一個數據包進行檢查,從它們的包頭中提取出所需要的信息,如源IP地址、目的IP地址、源端口號、目的端口號等,再與已建立的防火規則逐條進行比較,並執行所匹配規則的策略,或執行默認策略。 值得注意的是,在制定防火牆過濾規則時通常有兩個基本的策略方法可供選擇:一個是默認允許一切,即在接受所有數據包的基礎上明確地禁止那些特殊的、不希望收到的數據包;還有一個策略就是默認禁止一切,即首先禁止所有的數據包通過,然后再根據所希望提供的服務去一項項允許需要的數據包通過。一般說來,前者使啟動和運行防火牆變得更加容易,但卻更容易為自己留下安全隱患。通過在防火牆外部接口處對進來的數據包進行過濾,可以有效地阻止絕大多數有意或無意地網絡攻擊,同時,對發出的數據包進行限制,可以明確地指定內部網中哪些主機可以訪問互聯網,哪些主機只能享用哪些服務或登陸哪些站點,從而實現對內部主機的管理。可以說,在對一些小型內部局域網進行安全保護和網絡管理時,包過濾確實是一種簡單而有效的手段。
代理:LINUX防火牆的代理功能是通過安裝相應的代理軟件實現的。它使那些不具備公共IP的內部主機也能訪問互聯網,並且很好地屏蔽了內部網,從而有效保障了內部主機的安全。
IP偽裝:IP偽裝(IP Masquerade)是LINUX操作系統自帶的又一個重要功能。通過在系統內核增添相應的偽裝模塊,內核可以自動地對經過的數據包進行“偽裝”,即修改包頭中的源目的IP信息,以使外部主機誤認為該包是由防火牆主機發出來的。這樣做,可以有效解決使用內部保留IP的主機不能訪問互聯網的問題,同時屏蔽了內部局域網。
Linux下的包過濾防火牆管理工具:
在2.0的內核中,采用ipfwadm來操作內核包過濾規則。
在2.2的內核中,采用ipchains來控制內核包過濾規則。
在2.4的內核中,采用一個全新的內核包過濾管理工具——iptables。
包過濾防火牆的工作原理:
使用過濾器。數據包過濾用在內部主機和外部主機之間,過濾系統是一台路由器或是一台主機。過濾系統根據過濾規則原則來決定是否讓數據包通過。
過濾的實現。數據包過濾一般使用過濾路由器來實現,這種路由器與普通的路由器有所不同。
包過濾防火牆的工作層次:
應用層 應用層
傳輸層 傳輸層
網絡層 數據 路由器 數據 網絡層
數據鏈路層 數據鏈路層 數據鏈路層
物理層 物理層 物理層
包過濾器操作的基本過程:
包過濾技術的優缺點
優點:
對於一個小型的、不太復雜的站點,包過濾比較容易實現。
因為過濾路由器工作在IP層和TCP層,所以處理包的速度比代理服務器快。
過濾路由器為用戶提供了一種透明的服務,用戶不需要改變客戶端的任何應用程序,也不需要用戶學習任何新的東西。
過濾路由器在價格上一般比代理服務器便宜。
缺點:
一些包過濾網關不支持有效的用戶認證。
規則表很快會變得很大而且復雜,規則很難測試。隨着表的增大和復雜性的增加,規則結構出現漏洞的可能性也會增加。
這種防火牆最大的缺陷是它依賴一個單一的部件來保護系統。
在一般情況下,如果外部用戶被允許訪問內部主機,則他就可以訪問內部網上的任何主機。
包過濾防火牆只能阻止一種類型的IP欺騙,即外部主機偽裝內部主機的IP,對於外部主機偽裝外部主機的IP欺騙卻不可能被阻止,而且它不能防止DNS欺騙。
在Linux系統上,支持包過濾的核心中有三個規則列表,這些列表稱為防火牆鏈。三個鏈分別稱為輸入鏈、輸出鏈和轉發鏈。當一個包通過以太網卡進來后,核心使用輸入鏈決定該包的取舍。如果該包沒有被丟棄,則核心要決定下面將向哪里發送包,稱為包的路由。如果要發給另一個機器,核心通過轉發鏈來決定。最后,在包要被發出之前,核心通過輸出鏈來做決定。一個鏈是一些規則的列表。每個規則規定:如果包的包頭與規則相匹配,那么對包進行相應的處理。如果該規則與包不匹配,則引入鏈中的下一個規則。最后,如果沒有要引入的規則,核心根據內置鏈策略決定如何做。在一個有安全意識的系統中,該規則通常告訴核心將包拒絕或丟棄。
在這先介紹Ipchains,之后再介紹Iptables。
Ipchains:
Ipchains 經常使用的命令行格式如下:Ipchains –A chain [–i interface] [–p protocol] [[!] -y][–s source-ip [port]] [-d destination-ip [port]] –j policy [-l]對各選項的說明如下表:-A <chain> 添加一規則到鏈尾。chain可為input、output、forward。-i <interface> 指定本規則適用的網絡接口。通常有eth0、eth1、lo等。-p <protocol> 指定本規則適用的IP協議,如tcp、udp、icmp等。[!] –y -y表明tcp握手中的連接請求標志位SYN; ! –y 表示對該請求的響應。-s src-ip [port] 指明數據包的源IP地址,port表示本規則適用的端口號。-d dst-ip [port] 指明數據包的目的IP地址及端口號。-j policy
; 指定本規則對匹配數據包的處理策略:ACCEPT、DENY或REJECT。-l 在系統日志/var/log/messages中記錄與該規則匹配的數據包。
#ipchains –A input –s 201.202.203.58/32 www –p tcp –j DENY地址201.202.203.58送到www(HTTP)端口的任何TCP包都將被屏蔽。先創建一個名為check的新鏈,然后再把所有發送到輸入鏈的包送到check鏈:#ipchains –N check#ipchains –A check –s 201.202.203.0/24 –j ACCEPT#ipchains –A check –s !201.202.203.0/24 –j DENY#ipchains –A input –j check系統會接受(只會接受)從201.202.203.0發送的所有軟件包,式中感嘆號(!)代表的意思是“非”,匹配“非201.202.203.0端口”。禁止telnet(端口23)連接:#ipchains –I forward –s 0.0.0.0 23 –j DENY
Iptables的規則要素:
指定表(table)
指定操作命令(command)
指定鏈(chains)
指定規則匹配器(matcher)
指定目標動作(target)
表。Iptables從其使用的3個表而得名,分別是filter、nat和mangle。對於包過濾防火牆只使用filter表。表filter是默認的表。
操作命令。包括添加、刪除、更新等。
鏈。對於包過濾防火牆可操作filter表中的INPUT鏈、OUTPUT鏈和FORWARD鏈。也可以操作由用戶自己定義的自定義鏈。
規則匹配器。可以指定各種規則匹配,如IP地址、端口、包類型等。
目標動作。當規則匹配一個包時,真正要執行的任務用目標標識。最常用的內置目標分別是:
ACCEPT表示允許包通過。
DROP表示被丟棄。
REJECT表示拒絕包,丟棄包的同時給發送者發送沒有接受的通知。
LOG表示包的有關信息被記錄入日志。
TOS表示改寫包的ToS的值。
Iptables的語法通常可以簡化為:iptables[-t table]CMD[chain][rule-matcher][-j target]其中:table為表名,CMD為操作命令,chain為鏈名,rule-matcher為規則匹配器,target為目標動作。
操作命令:
-A 或—append 在所選鏈的鏈尾加入一條或多條規則-D 或—delete 從所選鏈中刪除一條或多條匹配的規則-R 或—replace 在所選鏈中替換一條匹配的規則-I 或—insert 以給出的規則號在所選鏈中插入一條或多條規則。如果規則號是1,插入的規則在鏈的頭部-L 或—list 列出指定鏈的所有規則。如果沒有指定鏈,將列出所有鏈中的所有規則-F 或—flush 清除指定鏈和表中的所有規則。假如不指定鏈,那么所有鏈都將被清空-N 或—new-chain 以給定的名字創建一條新的用戶自定義鏈。不能與已有的鏈同名-X 或—delete-chain 刪除指定的用戶定義鏈,必須保證鏈中的規則都不在使用時才能刪除鏈。若沒有指定鏈,則刪除所有的用戶鏈-P 或—policy 為永遠鏈指定默認規則(內置鏈策略)。用戶定義鏈沒有缺省規則也是規則鏈中的最后一條規則,用-L命令顯時它在第一行顯示-C 或—check 檢查給定的包是否與指定鏈的規則相匹配-Z 或—zero 將指定鏈中所有的包字節記數器清零
規則匹配器:
-P,[!]protocol 指定要匹配的協議,可以是tcp、udp、icmp、all。協議名前綴“!”為邏輯非,表示除去該協議之外的所有協議。-s[!]address[/mask] 根據源地址或地址范圍確定是否允許或拒絕數據包通過過濾器--sport[!]port[:port] 指定匹配規則的源端口或端口范圍。可以用端口好,也可以用/etc/services文件中的文字-d[!]address[/mask] 根據目的地址或地址范圍確定是否允許或拒絕數據包通過過濾器--dport[!]port[:port] 指定匹配規則的目的端口或端口范圍。可以用端口號,也可以用/etc/services文件中的名字--icmp-type[1]typename 指定匹配規則的ICMP信息類型(可以使用iptables –p icmp –h 查看有效的icmp類型名)
Iptables軟件包提供了兩個命令分別用於保存和恢復規則集。可以使用命令轉儲在內存中的內核規則集。其中/etc/sysconfig/iptables是iptables守護進程調用的默認規則集文件:#/sbin/iptables-save>/etc/sysconfig/iptables要恢復原來的規則庫,需使用命令:#/sbin/iptables-restore</etc/sysconfog/iptables為了使用得用iptables命令配置的規則在下次啟動機器時還能被使用,有兩種方法。
使用iptables得啟動腳本實現。Iptables的啟動腳本/etc/rc.d/init.d/iptables每次啟動時都使用/etc/sysconfig/iptables所提供的規則進行規則恢復,並可以使用命令保存規則:#service iptables save
在自定義腳本中用iptables命令直接創建規則集。可以直接用iptables命令編寫一個規則腳本,並在啟動時執行這個腳本。若規則腳本的文件名為/etc/fw/rules,則可以在啟動腳本/etc/rc.d/rc.local中加入的代碼:if[-x /etc/fw/rules];then /etc/fw/rules;fi;如果使用此種方式,建議使用ntsysv命令關閉系統的iptables守護進程。
建立包過濾防火牆
這個網絡結構假設內部網有有效的Internet地址。為了將內部網段198.168.80.0/24與Internet隔離,在內部網絡和 Internet之間使用了包過濾防火牆。防火牆的網接口是eth1(198.168.80.254),防火牆的Internet接口是eth0 (198.199.37.254)。加外,內網中有3台服務器對外提供服務。分別為:
WWW服務器:IP地址為198.168.80.251
FTP服務器:IP地址為198.168.80.252
E-mail服務器:IP地址為198.168.80.253
防火牆的建立過程
#!/sbin/bash在屏幕上顯示信息:echo "Starting iptables rules..."#開啟內核轉發功能echo "1">;/proc/sys/net/
ipv4/ip_forward#定義變量IPT=/sbin/iptablesWWW-SERVER=198.168.80.251FTP-SERVER=198.168.80.252EMAIL-SERVER=198.168.80.253IP_RANGE="198.168.80.0/24"#刷新所有的鏈的規則$IPT –F#首先禁止轉發任何包,然后再一步步設置允許通過的包#所以首先設置防火牆FORWARD鏈的策略為DROP$IPT -P FORWARD DROP#下面設置關於服務器的包過濾規則#由於服務器/客戶機交互是雙向的,所以不僅僅要設置數據包#出去的規則,還要設置數據包返回的規則
(1)WWW服務服務端口為80,采用tcp或udp協議規則為eth0=>;允許目的為內部網WWW服務器的包$IPT -A FORWARD -p tcp -d $WWW-SERVER-dport www -i eth0 -j ACCEPT(2)FTP服務服務端口為21,數據端口20FTP的傳輸模式有主動和被動之分,FTP服務采用tcp協議規則為:eth0=>;僅允許目的為內部網ftp服務器的包$IPT -A FORWARD -p tcp -d $FTP-SERVER -dport ftp -i eth0 -j ACCEPT(3)EMAIL服務包含兩個協議,一個是smtp,另一個是pop3出於安全性考慮,通常只提供對內的pop3服務所以在這里我們只考慮對smtp的安全性問題smtp端口為25,采用tcp協議規則為etho=>;僅允許目的為E-mail服務器的smtp請求$IPT -A FORWARD -p tcp -d $EMAIL-SERVER-dport smtp -i eth0 -j ACCEPT
下面設置針對Internet客戶的過濾規則:
本例中防火牆位於網關的位置,所以主要是防止來自Internet的攻擊不能防止來自Intranet的攻擊假如網絡中的服務器都是基於Linux的,也可以在每一部服務器上設置相關的過濾規則來防止來自Internet的攻擊
對於Internet對Intranet客戶的返回包,定義如下規則:(1)允許Intranet客戶采用被動模式訪問Internet的FTP服務器$IPT -A FORWARD -p tcp -s 0/0 --sport ftp-data -d $IP_RANGE -i eth0 -j ACCEPT(2)接收來自Internet的非連接請求tcp包$IPT -A FORWARD -p tcp -d 198.168.80.0/24 ! --syn -i eth0 -j ACCEPT(3)接收所有udp包,主要是針對oicq等使用udp的服務$IPT -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT
然后接受來自整個Intranet的數據包過濾,我們定義如下規則$IPT -A FORWARD -s 198.168.80.0/24 -i eth1 -j ACCEPT處理ip碎片接受所有的ip碎片,但采用limit匹配擴展對其單位時間可以通過的ip碎片數量進行限制,以防止ip碎片攻擊$IPT -A FORWARD -f -m limit-limit 100/s-limit-burst 100 -j ACCEPT說明:對不管來自哪里的ip碎片都進行限制,允許每秒通過100個ip碎片該限制觸發的條件是100個ip碎片設置icmp包過濾ipmp包通常用於網絡測試等,故允許所有的icmp包通過但是黑客常常采用icmp進行攻擊,如ping of death等所以我們采用limit匹配擴展加以限制$IPT -A FORWARD -p icmp -m limit-limit 1/s-limit-burst 10 -j ACCEPT說明:對不管來自哪里的icmp包都進行限制,允許每秒通過一個包該限制觸發的條件是10個包
三 結束語:
對防火牆的不當配置可能造成安全漏洞。如處理TCP分段時,Ipchains需要查看包頭中的源端口、目的端口、ICMP代碼或“TCP SYN”標志等信息,而這些信息只能在TCP分段的第一個IP包中才有。於是從第二個分段開始都不能匹配過濾規則。某些管理者將防火牆配置為僅對第一個分段進行處理。通常,一個TCP連接的第一個TCP分段被防火牆阻擋后,其他的TCP分段被認為不會產生安全性問題,因為在目的主機上由於缺少第一個分段而無法重新組裝報文。然而,由於系統缺陷等原因,發送的分段可能使機器癱瘓,甚至人為精心設計的IP包可借此缺陷繞過防火牆。因此配置防火牆需要仔細分析過濾規則如何處理各種類型的分組。對分段的處理最好將系統內核編譯為重新組裝所有通過的分段,或在應用層另設安全機制。
對基於包過濾防火牆更常見的攻擊是利用IP欺騙的方法。IP欺騙是指主機發送自稱是另一個主機發送的包。防止IP欺騙的方法是使用源地址確認,它通過配置路由器識別路由代碼實現,而不是防火牆。防火牆結合源地址確認能較好地增強系統的安全性
四 參考文獻
《Red Hat Linux 9網絡服務》機械工業出版社《Turbolinux 網絡管理教程》《Turbolinux 系統管理教程》
參考:http://biyelunwen.yjbys.com/fanwen/jisuanji/368996_3.html
