天天看點

iptable 相關(linux, mac)

下面這個說得很全面:

轉:http://blog.csdn.net/andyhooo/article/details/5869568

防火牆配置檔案iptables詳解(轉!)

(轉注:這篇文章全面而深入的介紹了linux下iptables的使用!強烈推薦)

對于Internet上的系統,不管是什麼情況都要明确一點:網絡是不安全的。是以,雖然建立一個防火牆并不能保證系統100%安全,但卻是絕對必要的。Linux提供了一個非常優秀的防火牆工具—netfilter/iptables。它完全免費、功能強大、使用靈活、可以對流入和流出的資訊進行細化控制,且可以在一台低配置機器上很好地運作。本文将簡單介紹使用netfilter/iptables實作防火牆架設和Internet連接配接共享等應用。

netfilter/iptabels應用程式,被認為是Linux中實作包過濾功能的第四代應用程式。netfilter/iptables包含在2.4以後的核心中,它可以實作防火牆、NAT(網絡位址翻譯)和資料包的分割等功能。netfilter工作在核心内部,而iptables則是讓使用者定義規則集的表結構。netfilter/iptables從ipchains和ipwadfm(IP防火牆管理)演化而來,功能更加強大。下文将netfilter/iptabels統一稱為iptables。

可以用iptables為Unix、Linux和BSD個人工作站建立一個防火牆,也可以為一個子網建立防火牆以保護其它的系統平台。iptales隻讀取資料標頭,不會給資訊流增加負擔,也無需進行驗證。要想獲得更好的安全性,可以将其和一個代理伺服器(比如squid)相結合。

基本概念

典型的防火牆設定有兩個網卡:一個流入,一個流出。iptables讀取流入和流出資料包的報頭,将它們與規則集(Ruleset)相比較,将可接受的資料包從一個網卡轉發至另一個網卡,對被拒絕的資料包,可以丢棄或按照所定義的方式來處理。

通過向防火牆提供有關對來自某個源位址、到某個目的地或具有特定協定類型的資訊包要做些什麼的指令,規則控制資訊包的過濾。通過使用iptables系統提供的特殊指令iptables建立這些規則,并将其添加到核心空間特定資訊包過濾表内的鍊中。關于添加、去除、編輯規則的指令,一般文法如下:

iptables [-t table] command [match] [target]

1.表(table)

[-t table]選項允許使用标準表之外的任何表。表是包含僅處理特定類型資訊包的規則和鍊的資訊包過濾表。有三個可用的表選項:filter、nat和mangle。該選項不是必需的,如果未指定,則filter作為預設表。各表實作的功能如表1所示。

表1 三種表實作的功能

iptable 相關(linux, mac)

            <!--[if !vml]-->2.指令(command)

command部分是iptables指令最重要的部分。它告訴iptables指令要做什麼,例如插入規則、将規則添加到鍊的末尾或删除規則。表2是最常用的一些指令及例子。

表2 指令的功能和樣例

iptable 相關(linux, mac)

<!--[if !vml]--><!--[endif]-->

3.比對(match)

iptables指令的可選match部分指定資訊包與規則比對所應具有的特征(如源位址、目的位址、協定等)。比對分為通用比對和特定于協定的比對兩大類。這裡将介紹可用于采用任何協定的資訊包的通用比對。表3是一些重要且常用的通用比對及示例說明。

表3 通用比對及示例說明

iptable 相關(linux, mac)

<!--[if !vml]--><!--[endif]-->

4.目标(target)

目标是由規則指定的操作,對與那些規則比對的資訊包執行這些操作。除了允許使用者定義的目标之外,還有許多可用的目标選項。表4是常用的一些目标及示例說明。

除表4外,還有許多用于建立進階規則的其它目标,如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等。

表4 目标及示例說明

iptable 相關(linux, mac)

應用iptables

與ipchains和ipfwadm不同的是,iptables可以配置有狀态的防火牆。iptables可以檢測到源位址和目的位址、源端口和目的端口及流入資料包的順序,即iptables記住了在現有連接配接中,哪些資料包已經被允許接收。這使得暫時性的端口隻有在需要時才會被打開,并且會拒絕所有永久性占用端口的請求,大大地加強了安全性。同時,那些被更改了報頭的資料包,即使包含有一個被允許的目的位址和端口,也會被檢測到并被丢棄。此外,有狀态的防火牆能夠指定并記住為發送或接收資訊包所建立連接配接的狀态。防火牆可以從資訊包的連接配接跟蹤狀态獲得該資訊。在決定新的資訊包過濾時,防火牆所使用的這些狀态資訊可以增加其效率和速度。

1.啟動和停止iptables

下面将正式使用iptables來建立防火牆。啟動和停止iptables的方法取決于所使用的Linux發行版,可以先檢視所使用Linux版本的文檔。

一般情況下,iptables已經包含在Linux發行版中,運作iptables --version來檢視系統是否安裝了iptables。在Red Hat 9.0中,安裝的版本是iptables v1.2.7a。如果系統沒有安裝iptables,則可以從http://www.netfilter.org下載下傳。

2.檢視規則集

上面僅對iptables的用法做了一個簡單介紹,使用中可以運作man iptables來檢視所有指令和選項的完整介紹,或者運作iptables -help來檢視一個快速幫助。要檢視系統中現有的iptables規劃集,可以運作以下指令:

iptables --list

下面是沒有定義規劃時iptables的樣子:

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

如上例所示,每一個資料包都要通過三個内建的鍊(INPUT、OUTPUT和FORWARD)中的一個。

filter是最常用的表,在filter表中最常用的三個目标是ACCEPT、DROP和REJECT。DROP會丢棄資料包,不再對其進行任何處理。REJECT會把出錯資訊傳送至發送資料包的主機。

<!--[if !vml]--><!--[endif]-->

在Red Hat 9.0中,提供一個GUI程式來讓使用者對系統的安裝級别進行簡單的配置。該工具的啟動方法是:主選單→系統設定→安全工具(如圖1所示)。在此将安全級别設為“進階”,并選擇使用預設的防火牆規則。點選确定後,再用iptables -list顯示,發現iptables與沒有定義規則前已經有很大不同,如下所示:

[[email protected] root]# iptables --list

Chain INPUT (policy ACCEPT)

target prot opt source destination

RH-Lokkit-0-50-INPUT all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)

target prot opt source destination

RH-Lokkit-0-50-INPUT all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

......

現實中一般不使用這個GUI工具,因為它的功能有限,也不夠透明。相比較而言,SuSE 9.0中相應的配置工具要好得多,它可以在GUI下對防火牆進行更加細化的配置(比如增加了IP轉發和僞裝等功能的配置)。盡管這樣,一般還是自己來增加和删除規則。

.增加規則

本例中的規則将會阻止來自某一特定IP範圍内的資料包,因為該IP位址範圍被管理者懷疑有大量惡意攻擊者在活動:

# iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP

也可以很輕易地阻止所有流向攻擊者IP位址的資料包,該指令稍有不同:

# iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP

注意這裡的A選項,如前所述,使用它說明是給現有的鍊添加規則。

4.删除規則

網絡上的惡意攻擊者總是在變化的,是以需要不斷改變IP。假設一個網上攻擊者轉移到新的IP位址,而其老的IP位址被配置設定給一些清白的使用者,那麼這時這些使用者的資料包将無法通過你的網絡。這種情況下,可以使用帶-D選項的指令來删除現有的規則:

# iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP

5.預設的政策

建立一個具有很好靈活性、可以抵禦各種意外事件的規則需要大量的時間。對于那些沒有時間這樣做的人,最基本的原則是“先拒絕所有的資料包,然後再允許需要的”。下面來為每一個鍊設定預設的規則:

# iptables -P INPUT DROP

# iptables -P FORWARD DROP

# iptables -P OUTPUT ACCEPT

這裡選項-P用于設定鍊的政策,隻有三個内建的鍊才有政策。這些政策可以讓資訊毫無限制地流出,但不允許資訊流入。很多時候需要接收外部資訊,則可使用以下指令:

# iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT

6.SYN的使用

不能關閉所有端口,也不能隻指定某些端口處于打開狀态,那麼怎樣才能設定一個有效的規則,既可以允許普通使用者正常通過,又可以阻止惡意攻擊者通路網絡呢?

剛開始使用iptables的人可以充分利用syn辨別來阻止那些未經授權的通路。iptables隻檢測資料包的報頭,事實上,除iptables以外,很多其它有用的資料包分析都是基于報頭的。比如,在進行Web沖浪時,一個請求從你的PC發送至其它地方的Web伺服器上,該伺服器會響應請求并發回一個資料包,同時得到你系統上的一個臨時端口。與響應請求不同的是,伺服器并不關心所傳送的内容。可以利用這種特點來設定規則,讓它阻止所有沒有經過你系統授權的TCP連接配接:

# iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP

這裡的-i指的是網卡,-p則是指協定,--syn則表示帶有syn辨別設定的TCP資料包。SYN用于初始化一個TCP連接配接,如果自己機器上沒有運作任何伺服器,别人也就不會向你發送SYN資料包。

7.有狀态的資料包的檢測

前邊的例子把每一個資料包看成是獨立的,而不是互相關聯的,依靠的是資料包的頭資訊。iptables會檢查資料包的源和目的IP位址、源和目的端口、流入資料包的順序号、TCP先後順序的資訊及頭标記(SYN、ACK、FIN、RST等)的狀态,即它會跟蹤整個連接配接會話,進而使整個過濾過程是互相關聯的。

8.共享一個Internet連接配接

網絡位址翻譯和IP僞裝都可以實作多台主機共享一個Internet連接配接,這個區域網路可以是Linux和Windows系統組成的多系統區域網路。假設現在有一台機器,配有兩個網卡,其中eth0為“公共”網卡,eth1為“私有”網卡,即eth0被配置設定了一個靜态的、可路由的IP位址,而eth1被配置設定了一個私有的、不能路由的IP,該IP是屬于該區域網路子網的。要實作上述功能,需要向nat和filter表中添加一些鍊:

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

# iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT

這顯示了有狀态的資料包檢測的價值。請注意,這裡是如何實作流入資料包隻有在屬于一個已經存在的連接配接時才被允許,而所有來自區域網路内流向外的資料包則都允許通過。第一條規則讓所有流出的資訊看起來都是來自防火牆機器的,而并不會顯示出防火牆後面還有一個區域網路。

下面的指令為FORWARD和POSTROUTING鍊設定預設的政策,在使用僞裝時,有一個預設的POSTROUTING DROP政策非常重要,否則就可能有心懷惡意的使用者突破網關後僞裝自己的身份。

# iptables -t filter -P FORWARD DROP

# iptables -t nat -P POSTROUTING DROP

下面的指令為撥接上網設定,它可以動态地配置設定IP位址:

# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

9.運作伺服器時的情況

有時也會把伺服器放置在防火牆後面,這時iptables就需要知道從哪兒通過資料包,設定如下所示:

# iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 80 -j DNAT -to 192.168.0.10:80

# iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 25 -j DNAT -to 192.168.0.11:25

10.規則的儲存

到現在為止,所有的例子都是在指令行中進行的。在測試新的規則時,這是一種很好的方式,但一旦測試結果令人滿意,就可以将它們儲存為腳本。可以使用 iptables-save 指令來實作:

$ iptables-save >; iptables-script

資訊包過濾表中的所有規則都被儲存在檔案iptables-script中。無論何時再次引導系統,都可以使用iptables-restore指令将規則集從該腳本檔案恢複到資訊包過濾表。恢複指令如下所示:

$ iptables-restore iptables-script

如果願意在每次引導系統時自動恢複該規則集,則可以将上面指定的這條指令放到任何一個初始化Shell腳本中。

下面的例子并不是一個完整的腳本,它隻是描述了如何使用變量及提供了一些附加的規則樣例。

#!/bin/sh

#為變量指派

IPTABLES=/sbin/iptables

LAN_NET="192.168.1.0/24"

Ieth0"

LO_I

LO_IP="127.0.0.1"

#加載所需的核心

/sbin/modprobe ip_conntrack

/sbin/modprobe iptable_nat

#預設情況下,IP轉發都處于不可用狀态,将其設定為可用狀态:

echo "1" >; /proc/sys/net/ipv4/ip_forward

#使IP的動态配置設定功能可用

echo "1" >; /proc/sys/net/ipv4/ip_dynaddr

#每次重新開機這個腳本時,最好清除以前所設的規則

$IPTABLES -P INPUT DROP

$IPTABLES -F INPUT

$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -F OUTPUT

$IPTABLES -P FORWARD DROP

$IPTABLES -F FORWARD

$IPTABLES -F -t nat

#隻允許在LAN中使用SSH連接配接

$IPTABLES -A INPUT -s LAN_NET -p tcp --destination-port ssh -j ACCEPT

#允許loopback!

$IPTABLES -A INPUT -i lo -p all -j ACCEPT

$IPTABLES -A OUTPUT -o lo -p all -j ACCEPT

#丢棄那些流入的宣稱是來自本地機器的資料包

#丢棄那些流出的不是出自本地機的資料包

$IPTABLES -A INPUT -i $IFACE -s $LAN_NET -j DROP

$IPTABLES -A OUTPUT -o $IFACE -s ! $LAN_NET -j DROP

#限制一些流出的資訊

$IPTABLES -A OUTPUT -o eth0 -p tcp -dport 31337 -j DROP

$IPTABLES -A OUTPUT -o eth0 -p tcp -sport 31337 -j DROP

#此外,31335、27444、27665、20034 NetBus、9704、137-139(smb)端口也應被禁止。

---------------------------------------

下面這個說得很具體實用:

轉:http://bbs.hx95.com/read.php?tid=5319

iptables是Linux上常用的防火牆軟體,下面vps偵探給大家說一下iptables的安裝、清除iptables規則、iptables隻開放指定端口、iptables屏蔽指定ip、ip段及解封、删除已添加的iptables規則等iptables的基本應用。

1、安裝iptables防火牆

如果沒有安裝iptables需要先安裝,CentOS執行:

yum install iptables

Debian/Ubuntu執行:

apt-get install iptables

2、清除已有iptables規則

iptables -F

iptables -X

iptables -Z

3、開放指定的端口

#允許本地回環接口(即運作本機通路本機)

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

# 允許已建立的或相關連的通行

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#允許所有本機向外的通路

iptables -A OUTPUT -j ACCEPT

# 允許通路22端口

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#允許通路80端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#允許FTP服務的21和20端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp --dport 20 -j ACCEPT

#如果有其他端口的話,規則也類似,稍微修改上述語句就行

#禁止其他未允許的規則通路

iptables -A INPUT -j REJECT

iptables -A FORWARD -j REJECT

4、屏蔽IP

#如果隻是想屏蔽IP的話“3、開放指定的端口”可以直接跳過。

#屏蔽單個IP的指令是

iptables -I INPUT -s 123.45.6.7 -j DROP

#封整個段即從123.0.0.1到123.255.255.254的指令

iptables -I INPUT -s 123.0.0.0/8 -j DROP

#封IP段即從123.45.0.1到123.45.255.254的指令

iptables -I INPUT -s 124.45.0.0/16 -j DROP

#封IP段即從123.45.6.1到123.45.6.254的指令是

iptables -I INPUT -s 123.45.6.0/24 -j DROP

4、檢視已添加的iptables規則

iptables -L -n

v:顯示詳細資訊,包括每條規則的比對包數量和比對位元組數

x:在 v 的基礎上,禁止自動機關換算(K、M) vps偵探

n:隻顯示IP位址和端口号,不将ip解析為域名

5、删除已添加的iptables規則

将所有iptables以序号标記顯示,執行:

iptables -L -n --line-numbers

比如要删除INPUT裡序号為8的規則,執行:

iptables -D INPUT 8

6、iptables的開機啟動及規則儲存

CentOS上可能會存在安裝好iptables後,iptables并不開機自啟動,可以執行一下:

chkconfig --level 345 iptables on

将其加入開機啟動。

CentOS上可以執行:service iptables save儲存規則。

另外更需要注意的是Debian/Ubuntu上iptables是不會儲存規則的。

需要按如下步驟進行,讓網卡關閉是儲存iptables規則,啟動時加載iptables規則:

建立/etc/network/if-post-down.d/iptables 檔案,添加如下内容:

#!/bin/bash

iptables-save > /etc/iptables.rules

執行:chmod +x /etc/network/if-post-down.d/iptables 添加執行權限。

建立/etc/network/if-pre-up.d/iptables 檔案,添加如下内容:

#!/bin/bash

iptables-restore < /etc/iptables.rules

執行:chmod +x /etc/network/if-pre-up.d/iptables 添加執行權限。

關于更多的iptables的使用方法可以執行:iptables --help或網上搜尋一下iptables參數的說明。

繼續閱讀