Linux┊認識iptables(一):簡介

Category : 工作学习 / Tags : , / Date : 2008.11.04 / /

转自:天蓝工作室

1. 前言

iptables是Linux kernel 2.4所使用的封包過濾(Packet filtering)工具,前身的名字叫ipchains(Kernel 2.2)、ipfwadm(Kernel 2.0)以及ipfw(Kernel 1.1)。把封包過濾功能列為作業系統的一部份,表示業界正積極主動杜絕網絡駭客活動,若果連普羅大眾的個人電腦,也擁有功能強大的封包過濾功能,那麼駭客程式是很難入侵和散佈在網絡上的。

iptables只是控制封包的去向,它只會檢查封包內的標頭(header),而不會檢查封包的內容,因此它不是病毒防護軟件,但它靠控制封包去向的功能,可被設定成防火牆及路由器。

1.1 iptables的運作

iptables名符其實是一系列的「table」,是封包過濾的對照表,輸入封包的標頭,就能查出該封包能否進出網絡。一個封包經過 iptables時只有三種情況:INPUT(進入本地網絡)、OUTPUT(送出網絡)、FORWARD(封包跨網傳遞),情況如下:

圖中的橢圓形稱為firewall chain(或簡稱chain),所謂chain就是一組封包過濾規則,您可以在INPUT chain中加入一條防止所有外界封包進入的規則;您可以在OUTPUT chain中加入一條防止用戶連接某網頁伺服器。準備進入網絡的封包,會順著chain內的過濾規則被稽核,若果該封包並不符合任何規則,則會直接進入網內,因為INPUT和OUTPUT在Linux kernel裡被預設為ACCEPT,而FORWARD則被預設為DROP。

1.3 簡單實例

ICMP(Internet Control Message Protocol)是用來補充網絡層(Network layer)與數據鏈路層(Data link layer)的協定,用來偵測及修正路由錯誤,其中一個廣為人知的工具「ping」就是最簡單易用的網絡偵錯工具,您可使用它來檢查兩部主機能否在網絡上傳送資料。ping所使用的協定就是ICMP,由於ICMP本身有網絡安全設計上的缺陷(如偽路由閘道攻擊),因此我們是有需要過濾這類封包,但本章並不會詳細介紹ICMP,本章只藉著ICMP來示範如何阻隔ICMP封包。
我們先來試試使用ping工具:


ping -c 5 127.0.0.1

這樣會發放五個ICMP封包至自己的主機,在正常情況下會有以下訊息:


PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.259 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.078 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.075 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.073 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.072 ms

--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3996ms
rtt min/avg/max/mdev = 0.072/0.111/0.259/0.074 ms

若果我們加上以下的過濾規則:


iptables -A INPUT -p icmp -s 127.0.0.1 -j DROP

然後再執行「ping -c 5 127.0.0.1」,將會有以下訊息:

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

--- 127.0.0.1 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 3999ms

本人於四秒後按Ctrl+C來結束執行ping指令,結果顯示五個ICMP封包全部都被過濾。
 我們就是靠增加及修改過濾規則來設定防火牆和路由器,該指令當中的iptables就是設定過濾規則的程式,一般都放在/sbin或/usr/sbin中,只有擁有root權限的使用者才能執行;「-A」代表在某chain中增添過濾規則,「-A」後要輸入chain的名字,「-A INPUT」的整體意思是「在INPUT這道chain內添加以下過濾規則」;「-p」代表這道過濾規則適用於何種協定,在這個例子中「-p icmp」代表該規則只適用於ICMP,TCP、UDP等等並不受此限;「-s」代表封包的來源地址,「-s 127.0.0.1」即代表該規則只適用於源自127.0.0.1的封包;「-j」即是「jump to target」,在這裡解作若有某個封包符合以上所有條件時,那我們應如何處理它,最常用的target有ACCEPT、DROP與REJECT,使用者也可把target設定為另一道chain。

資料參考

[1]  Rusty Russell. "Linux 2.4 Packet Filtering HOWTO" [Online]. Available: http://www.netfilter.org/documentation/HOWTO//packet-filtering-HOWTO.html
[2]  Rusty Russell and Harald Welte. "Linux Netfilter Hacking HOWTO" [Online]. Available: http://www.netfilter.org/documentation/HOWTO//netfilter-hacking-HOWTO.html



无觅相关文章插件,快速提升流量

Comments

There are no comments.

Leave a Reply

You must be logged in to post a comment.

传奇 似水流年 绽放 风筝 八月照相馆