iptables防火牆設置

Iptables防火牆設置

防火牆規則的匹配順序流程圖

dAcBAAAAAAAA&ek=1&kp=1&pt=0&bo=ZgJqAQAAA

Iptables表和鏈的結構

Iptables有四張表,RAW,MANGLE,NAT,FILTER。表的處理優先級:raw>mangle>nat>filter

各表功能:

Filter:一般的過濾功能

Nat:用於nat功能-端口或地址映射

Mangle:用於對特定數據包的修改

Raw:有限級最高,設置raw是一般是爲了不再讓iptables做數據包的跟蹤鏈接處理,提高         性能

五個鏈:INPUT,FORWARD,PREROUTING,POSTROUTING,OUTPUT

一般無特殊需要,配置iptables是隻需配置filter和nat兩張表。如不開啓路由轉發,則只配置filter表。

Filter表中的鏈有:INPUT,FORWARD,OUTPUT

Nat表中的鏈有:PREROUTING,POSTROUTING,OUTPUT

Mangle表中的鏈有:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

Raw表中的鏈有:PREROUTING,OUTPUT

鏈相對數據包的位置:

PREROUTING:數據包進入路由表之前

INPUT:通過路由表後目的地位本機

FORWARD:通過路由表後,目的地不爲本機

OUTPUT:由本機產生,向外轉發

POSTROUTING:發送到網卡界面之前

dAYBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgKEAAAAA

Iptables部分參數簡介:

規則的增刪改:

-A(追加),-I(插入),-D(刪除一條規則),-R(修改),-L(查看),-P(默認規則)

常用參數:

-p (指定協議),-s(源地址),-d(目的地址),--sport(源端口),--dport(目的端口),-i(入口網卡),-o(出口網卡),-m(加載模塊),-t(指定表,默認爲filter表)

例:-m state --state  NEW,ESTABLISHED,RELATED,INVALID (聯機狀態)

-m multiport  --source-port|--destination-port   80,443,22

這裏-m  state 是告訴系統需加載state模塊,因爲這裏使用了--state

注:在使用多端口設置包過濾規則時,必須指定協議(-p  tcp|udp……)

常用的處理動作:

-j:用來指定要進行的處理動作

ACCEPT:將包放行,進行完此動作後,將不再對比其他規則,直接跳往下一個規則鏈

REJECT:攔阻改封包,並傳送封包通知,完成此動作,直接中斷過濾程序

DROP:丟棄包不予處理,進行完此動作後,將不再對比其他規則,直接中斷該程序

REDIRECT:將包重新導向到另一個端口(PNAT),之後繼續對比其他規則

MASQUERADE:改寫封包來源IP爲防火牆NIC IP,可指定port範圍,之後跳往下一

SNAT:改寫封包來源IP爲某特定IP或IP範圍,可指定port範圍,之後跳往下一規則

DNAT:改寫封包目的IP爲某特定IP或IP範圍,可指定port範圍,之後跳往下一規鏈

設定iptables從這裏開始

默認規則的設置

iptables設置默認規則

Iptables  -P  INPUT  DROP|ACCEPT

Iptables  -P  FORWARD  DROP|ACCEPT

Iptables  -P  OUTPUT  DROP|ACCEPT

dAgBAAAAAAAA&ek=1&kp=1&pt=0&bo=pwE6AAAAA

注:一般設置默認規則,INPUT鏈和FORWARD鏈爲DROP,OUTPUT鏈爲ACCEPT

以下規則的設置,即是依據一般性默認規則下設置的

1-允許迴環訪問

Iptables  -I   INPUT  -i  lo -j  ACCEPT

Iptables  -I   OUTPUT  -o  lo   -j   ACCEPT(在OUTPUT鏈的默認策略爲DROP時設)

dAgBAAAAAAAA&ek=1&kp=1&pt=0&bo=KQJmAAAAA

2-允許外部主機的ping測試

Iptables  -A  INPUT  -p  icmp   --icmp-type  echo-request   -j   ACCEPT

Iptables  -A  OUTPUT  -p  icmp  --icmp-type  echo-reply  -j   ACCEPT(OUTPUT鏈)

dAQBAAAAAAAA&ek=1&kp=1&pt=0&bo=KQJbAAAAA

3-允許本機ping測外部主機

Iptables  -A  INPUT  -p  icmp  --icmp-reply   -j   ACCEPT

Iptables  -A  OUTPUT  -p  icmp   --icmp-requst   -j   ACCEPT

注:在INPUT鏈添加了聯機狀態規則(如下)下,不設置上述規則也是可以ping外部主機的。

Iptables  -I  INPUT  -m  state  --state  ESTABLISEHED,RELATED  -j  ACCEPT

在不影響外部ping本主機測試的情況下,可設置下面這條命令進行限制本機ping外部主機

iptables  -I  INPUT  -p  icmp  --icmp-type  echo-reply  -j  REJECT

注意此規則的位置,必須放在下圖INPUT第二行規則之前,否則無效。(此涉及iptables規則匹配的順序---自上而下)

dAgBAAAAAAAA&ek=1&kp=1&pt=0&bo=KQJyAAAAA

4-限制指定ip地址訪問本機

Iptables  -A  INPUT  -i   eth0  -s   ip   -j   DROP

加上“-p  tcp”可以指定只屏蔽ip的tcp數據包

5-指定範圍內ip地址遠程連接本機

Iptables  -A  INPUT  -p  tcp  --dport  22  -s  192.168.1.0/24  -j  ACCEPT

dAQBAAAAAAAA&ek=1&kp=1&pt=0&bo=KQJmAAAAA

注:當其他ip段連接登錄本機時,因源地址的網段與規則不匹配,往下也無匹配的規則,最後採用默認策略拒絕掉連接請求。

dFsBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgI7AAAAA

6-允許所有的ssh連接本機請求

Iptables  -A  INPUT  -i  eth0  -p  tcp  --dport  22  -m  state  --state  NEW,ESTABLISHED  -j  ACCEPT

Iptables  -A  OUTPUT  -o  eth0  -p  tcp  --dport  22  -m  state  --state  ESTABLISHED  -j  ACCEPT(在OUTPUT的默認策略爲DROP的情況下添加這條語句)

注:若要限制或允許某一ip連接可用參數“-s  ip”來指定拒絕“-j  ACCEPT”。對於http/https的連接請求,與上述設置一樣,只需改變目的端口即可

7-禁止本機發起ssh連接請求

Iptables -A OUTPUT -o  eth0  -p  tcp  --dport  22  -m  state  --state NEW,ESTABLISHED  -j  REJECT(因爲是發起的ssh請求,所有是出口,端口爲目的端口)  

dAcBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgIXAAAAAdAgBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgIsAAAAA        

dAMBAAAAAAAA&ek=1&kp=1&pt=0&bo=KQJSAAAAA

Iptables  -A  INPUT  -i  eth0  -p  tcp  --sport  22  -m  state  --state  ESTABLISHED  -j  REJECT

dAYBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgImAAAAA

注:兩條規則任選一條。

8-多端口規則設置(ssh,http連接訪問)

基於ssh、http、https協議都是基於tcp協議,設置規則是隻是端口的不同,可利用多端口簡化設置。

Iptables  -A  INPUT  -i  eth0  -p  tcp  -m  multiport  --dports  22,80,443  -j  ACCEPT

9-允許解析DNS(出站DNS連接)

Iptables  -A  INPUT  -i  eth0  -p  udp(tcp)  --sport  53  -j  ACCEPT

Iptables  -A  OUTPUT  -o  eth0  -p  udp(tcp)  --dport  53  -j  ACCEPT

注:注意數據包的流向。

10-數據庫連接限制內網連接

Iptables  -A  INPUT  -i  eth0  -p  tcp  -s  10.65.110.0/24  --dport  3306  -m  state  --state  NEW,ESTABLISHED  -j  ACCEPT

Iptables  -A  OUTPUT  -o  eth0  -p  tcp  --sport  3306  -m  state  ESTABLISHED  -j  ACCEPT (依據OUTPUT鏈的默認策略選擇添加與否)

其他類似的服務依據端口和協議和是否限定ip來模仿上述格式設置iptables的規則。

11-防止DOS***(此規則未測試)

Iptables  -A  INPUT  -p  tcp  --dport  80  -m  limit  --limit  25/minute   --limit-burst  100  -j  ACCEPT

-m  limit :啓用limit擴展

--limit  25/minute:允許最多每分鐘25個連接

--limit-burst  100:當達到100個連接後,才啓動上述25/minute限制

注:依據實際情況選擇規則添加與否和連接限制參數

12-負載均衡(未測試)

可以利用iptables的-m nth擴展,及其參數(–counter 0 –every 3 –packet x),進行DNAT路由設置(-A PREROUTING -j DNAT –to-destination),從而將負載平均分配給3臺服務器:

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

13-nat轉發

在做轉發前,明確轉發的方向,ip地址,以及瞭解iptables轉發過程中數據包的流向。

下面是iptables在做轉發時,數據包的流向。如下:

dAYBAAAAAAAA&ek=1&kp=1&pt=0&bo=9QECAQAAA

主機104開啓路由轉發

dFsBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgKfAAAAA

如本地主機有兩片網卡,eth0(連接內網)和eth1(連接外網)。則可以做如下轉發,只需將ip地址做轉換即可,而本文由於設備限制,做的是單網卡的ip映射。但原理是一樣的。

轉發是依靠nat表中PREROUTING和POSTROUTING鏈來完成的。可以實現端口映射,ip映射,內部ip僞裝

內網數據到外網的轉發

Iptables  -A  FORWARD  -i  eth0  -o  eth1  -j  ACCEPT

端口映射

例如將來自端口88的請求轉發到80端口

Iptables  -A  INPUT  -p  tcp  --dport  88  -d  192.168.1.104  -j  DNAT  --to  192.168.1.104:80 

http測試

dAQBAAAAAAAA&ek=1&kp=1&pt=0&bo=dwGMAAAAA

注:在這裏爲什麼不設置轉發鏈還可以訪問成功,是因爲這裏的ip沒有被轉發鏈修改,變得只是目的端口(由88改爲80)。

Ip映射

對於Iptables的ip映射,本文實現ip轉發的要求和環境如下:

環境:主機192.168.1.104

  主機 192.168.1.107

  Windows:192.168.1.53

要求:將所有訪問192.168.1.104的主機服務的請求轉發給主機192.168.1.107,並且,請求的迴應經由192.168.1.104返回給客戶端(例如:192.168.1.53)

對於做ip映射,規則鏈的默認規則如下:

INPUT    DROP

FORWARD   DROP

OUTPUT   ACCEPT

PREROUTING和POSTROUTING鏈不做要求

配置如下:

dAMBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgLNAAAAA

命令:

1- iptables  -t  nat  -A  PREROUTING  -p  tcp  --dport  80  -d  192.168.1.104

-j  DNAT  --to 192.168.1.107:80

2- iptables  -t  nat  -A  POSTROUTING  -o  eth0  -p  tcp  --dport  80  -d  192.168.1.107  -j  SNAT  --to-source  192.168.1.104

3- iptables  -I  FORWARD  -p  tcp  -m  state  --state  ESTABLISHED,RELATED  -j  ACCEPT

(注:這一條在FORWARD默認策略爲DROP時必須加上,否則ip映射失敗)

4- iptables  -A  FORWARD  -p  tcp  --dport  80   -d  192.168.1.107  -j  ACCEPT

注:若FORWARD鏈的默認規則爲ACCEPT,第3,4條規則可省略。

解釋:

第一條:即iptables的ip映射,這是主要規則

第二條:這條規則是在數據包流出之前將數據包的源地址映射爲中介ip,使響應數據包可以              找到返回路徑。這是對於靜態(內網)ip而言。而雙網卡或動態獲取ip時,可使              用“-j  MASQUERADE”機制,系統自動讀取網卡信息,將源地址映射爲與網卡              同網段的ip地址。主要作用是(內外網通信)在數據包出去後,響應數據包可以返回

第三條:這條規則表示與系統已經建立的連接,或與某程序相關的數據包允許轉發。

第四條:在默認規則爲DROP的情況下,可以轉發的條件規則。

測試:

以Apache服務進行ip轉發測試,一下是主機104和主機107的http網頁測試內容:

dAcBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgJjAAAAA

dAUBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgJPAAAAA

以下截圖,客戶端在訪問104主機時,網頁顯示的內容爲107主機的網頁內容。

dAcBAAAAAAAA&ek=1&kp=1&pt=0&bo=sAF3AAAAA

dAYBAAAAAAAA&ek=1&kp=1&pt=0&bo=bgF*AAAAA

下面是抓包結果,顯示了數據包請求與響應的流向。

dAQBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgI.AAAAA

以上,表面ip映射成功。

若還需要對訪問的ip進行限制,可使用“-s  192.168.1.0/24”網段來實現。具體配置,依據實際情況增加和刪減規則。

注:最後在測試的時候,如果開始測試時是可以的,後來又不行了,那有可能是網卡出錯了。可以查看一下這個文件中的信息。這個文件是專門存放網卡信息的文件。通信網卡要與ifconfig顯示一致

/etc/udev/rules.d/70-persistent-net.rules

dAgBAAAAAAAA&ek=1&kp=1&pt=0&bo=KgJsAAAAA

 

參考文檔:

http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457077.html

http://www.2cto.com/os/201308/238142.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章