天天看點

【圖文詳解】Iptables

Iptables 原理

現在防火牆主要分以下三種類型:包過濾、應用代理、狀态檢測

包過濾防火牆:現在靜态包過濾防火牆市面上已經看不到了,取而代之的是動态包過濾技術的防火牆哈~

代理防火牆:因一些特殊的封包攻擊可以輕松突破包過濾防火牆的保護,比如大家知道的 SYN攻擊、ICMP 洪水攻擊,是以以代理伺服器作為專門為使用者保密或者突破通路限制的資料轉發通道的應用代理防火牆出現了哈~其使用了一種應用協定分析的新技術。 狀态檢測防火牆:其基于動态包過濾技術發展而來,加入了一種狀态檢測的子產品,進一點發展了會話過濾功能,會話狀态的保留是有時間限制的,此防火牆還可以對包的内容進行分析,進而避免開放過多的端口。

netfilter/iptables IP 資料包過濾系統實際上由 netfilter 和 iptables 兩個元件構成。

netfilter 是內建在核心中 的一部分,其作用是定義、儲存相應的規則,而 iptables 是一種工具,用來修改資訊的過濾規則及其他配置,我們可以通過 iptables 來設定一些适合我們企業需求環境的規則哈~,而這些規則會儲存在核心空間之中。 netfilter 是 Linux 核心中的一個通用架構,其提 供了一系列的表(tables),每個表由若幹個鍊(chains)組成,而每條鍊可以由一條或若幹條規則(rules)組成。實際上 netfilter 是表的容器,表是鍊的容器,而鍊又是規則的容器。

filter 表

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables2.png"></a>

nat表

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables3.png"></a>

mangle 表

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables4.png"></a>

iptables 内置鍊

PREROUTING:資料包進入本機,進入路由器之前

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

FORWARDING:通過路由表後,目的地不為本機

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

POSTROUTIONG:通過路由表後,發送到網卡接口之前

netfilter 五條鍊互相關系,即 iptables 資料包轉發流程圖

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables5.png"></a>

Iptables 工作流程圖

iptables 擁有三個表和五條鍊組成

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables6.png"></a>

NAT 工作原理

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables7.png"></a>

Iptables 詳細參數表

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables8.png"></a>

Iptables 基本文法

iptables [-t 表名] -指令 -比對 -j 動作/目标 

iptables 内置了 filter、nat 和 mangle 三張表,我們可以使用-t 參數來設定對哪張表生效哈~也可以省略-t 參數,則預設對 filter 表進行操作。

具體指令參數可以通過 man iptables查詢哈~

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables9.png"></a>

配置 SNAT 指令基本文法

iptables -t nat -A POSTROUTING -o 網絡接口 -j SNAT --to-source IP 位址

配置 DNAT 指令基本文法

iptables -t nat -A PREROUTING -i 網絡接口 -p 協定 --dport 端口 -j DNAT

--to-destination IP 位址

企業環境及需求

1、企業環境 

230 台客戶機,IP 位址範圍為 192.168.0.1~192.168.0.254,子網路遮罩為 255.255.255.0

Mail 伺服器:IP 位址為 192.168. 1.1 子網路遮罩為 255.255.255.0

FTP 伺服器:IP 位址為 192.168.1.2 子網路遮罩為 255.255.255.0

WEB 伺服器:IP 位址為 192.168.1.3 子網路遮罩為 255.255.255.0

公司網絡拓撲圖如下:

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables10.png"></a>

2、配置預設政策

所有内網計算機需要經常通路網際網路,并且員工會使用即時通信工具與客戶進行溝通,企業網絡DMZ 隔離區搭建有 Mail、FTP 和 Web 伺服器,其中 Mail 和 FTP 伺服器對内部員工開放,僅需要對外釋出 Web 站點,并且管理者會通過外網進行遠端管理,為了保證整個網絡的安全性,需要添加 iptables 防火牆并配置相應的政策

需求分析

企業的内部網絡為了保證安全性,需要首先删除所有規則設定,并将預設規則設定為 DROP,然後開啟防火牆對于用戶端的通路限制,打開 WEB、MSN、QQ 及 MAIL 的相應端口,并允許外部用戶端登入 WEB 伺服器的 80、22 端口。

解決方案

1、配置預設政策

預設 iptables 已經被安裝好了

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables11.png"></a>

(1)删除政策

iptables -F :清空所選鍊中的規則,如果沒有指定鍊則清空指定表中所有鍊的規則

iptables -X :清除預設表 filter 中使用者自定鍊中的規則

iptables -Z :清除預設表 filter 中使用者自定鍊中的規則

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables12.png"></a>

(2)設定預設政策

設定預設政策為關閉 filter 表的 INPPUT 及 FORWARD 鍊開啟 OUTPUT 鍊,nat 表的三個鍊PREROUTING、OUTP UT、POSTROUTING 全部開啟哈~預設全部鍊都是開啟的,是以有些指令可以不操作,另外 mangle 表本文沒用到,是以不做處理,mangle 主要用在資料包的特殊變更處理上,比如修改 TOS 等特性。

2、設定回環位址 

有些服務的測試需要使用回環位址,為了保證各個服務的正常工作,需要允許回環位址的通信,己有涉及,如果不設定回環位址,有些服務不能啟動哈~。

iptables -A INPUT -i lo -j ACCEPT 

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables15.png"></a>

3、連接配接狀态設定

為了簡化防火牆的配置操作,并提高檢查的效率,需要添加連接配接狀态設定

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEP T 

連接配接跟蹤存在四種資料包狀态

NEW :想要建立連接配接的資料包

INVALID :無效的資料包,例如損壞或者不完整的資料包

ESTABLISHED :已經建立連接配接的資料包

RELATED :與已經發送的資料包有關的資料包

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables16.png"></a>

4、設定 80 端口轉發

公司網站需要對外開放,是以我們需要開放 80 端口

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

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables17.png"></a>

5、DNS 相關設定

為了用戶端能夠正常使用域名通路網際網路,我們還需要允許内網計算機與外部 DNS 伺服器的轉發。

開啟 DNS 使用 UDP、TCP 的 53 端口

iptables -A FORWARD -p tcp --dport 53 -j ACCEPT

iptables -A FORWARD -p udp --dport 53 -j ACCEPT

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables18.png"></a>

6、允許通路伺服器的 SSH

管理者會通過外網進行遠端管理,是以我們要開啟 SSH 使用的 TCP 協定 22 端口

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

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables19.png"></a>

7、允許内網主機登入 MSN 和 QQ 相關設定

QQ 能夠使用 TCP80、8000、443 及 UDP8000、4000 登入,而 MSN 通過 TCP1863、443 驗證。是以

隻需要允許這些端口的 FORWARD轉發即可以正常登入。

iptables -A FORWARD -p tcp --dport 1863 -j ACCEPT

iptables -A FORWARD -p tcp --dport 443 -j ACCEPT

iptables -A FORWARD -p tcp --dport 8000 -j ACCEPT

iptables -A FORWARD -p udp --dport 8000 -j ACCEPT

iptables -A FORWARD -p udp --dport 4000 -j ACCEPT

注意:當然,如果公司要限制這樣即時通信工具的使用,隻要禁止這些端口的轉發就可以了哈~

特别注意:麻花疼這家夥忒壞~嘿嘿~,端口不固定,QQ//V/I/P 會員專用通道什麼的,代理登入等等哈~,是以我們如果需要封殺就要收集全登入端口及 QQ 伺服器位址,根據總結,最好在企業實際配置中技術與行政管理相結合,這樣達到的效果最好~

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables20.png"></a>

8、允許内網主機收發郵件

用戶端發送郵件時通路郵件伺服器的 TCP25 端口。接收郵件時通路,可能使用的端口則較多,UDP協定以及 TCP 協定的端口:110、143、993 及 995

smtp:

iptables -A FORWARD -p tcp --dport 25 -j ACCEPT 

pop3:

iptables -A FORWARD -p tcp --dport 110 -j ACCEPT

iptables -A FORWARD -p udp --dport 110 -j ACCEPT

imap:

iptables -A FORWARD -p tcp --dport 143 -j ACCEPT

iptables -A FORWARD -p udp --dport 143 -j ACCEPT

imaps: 

iptables -A FORWARD -p tcp --dport 993 -j ACCEPT

iptables -A FORWARD -p udp --dport 993 -j ACCEPT

pop3s:

iptables -A FORWARD -p tcp --dport 995 -j ACCEPT 

iptables -A FORWARD -p udp --dport 995 -j ACCEPT

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables21.png"></a>

9、NAT 端口映射設定

由于區域網路的位址為私網位址,在公網上不合法哈~是以必須将私網位址轉為伺服器的外部位址進行位址映射哈~連接配接外網接口為 ppp0

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE 

MASQUERADE 和 SNAT 作用一樣哈~相樣是提供源位址轉換的操作,但是 MASQUERADE 是針對外部接口為動态 IP 位址來設定滴,不需要使用--to-source 指定轉換的 IP 位址。如果網絡采用的是撥号方式接入網際網路,而沒有對外的靜态 IP 位址(主要用在動态擷取 IP 位址的連接配接,比如 ADSL撥号、DHCP 連接配接等等),那麼建議使用 MASQUERADE 哈~

注意:MASQUERADE 是特殊的過濾規則,其隻可以映射從一個接口到另一個接口的資料哈~

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables22.png"></a>

10、内網機器對外釋出 WEB 網站

内網 WEB 伺服器 IP 位址為 192.168.0.3,我們需要進行如下配置哈~,當公網用戶端通路伺服器時,防火牆将請求映射到内網的 192.168.0.3 的 80 端口

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT  --to-destination

192.168.1.3:80

<a href="http://itchenyi.com/wp-content/uploads/2012/11/iptables23.png"></a>

11、儲存與恢複 iptables 配置

儲存:iptables-save

iptables-save [-c] [-t 表名]

-c:儲存包和位元組計數器的值。可以使在重新開機防火牆後不丢失對包和位元組的統計

-t:用來儲存哪張表的規則,如果不跟-t 參數則儲存所有的表

可以使用重定向指令來儲存這些規則集

iptables-save &gt; /etc/iptables-save

恢複:iptables-restore

iptables-restore [-c] [-n]

-c:如果加上-c 參數則表示要求裝入包和位元組計數器

-n:表示不覆寫己有的表或表内的規則,預設情況下是清除所有己存在的規則

使用重定向來恢複由 iptables-save 儲存的規則集

iptables-restore &gt; /etc/iptables-save

如果要在服務或系統重新開機後依然生效

12、最終 iptables 配置如下  nat可以自己檢視下!

注意:

SNAT 将源網絡位址進行轉換,隻能用在 nat 表的 POSTROUTING 鍊中,隻要連接配接的第一個符合條件的包被 SNAT 了哈~,那麼這個連接配接的其他所有的資料包都會自動地被 SNAT。與 SNAT 對應,DNAT将目的位址進行轉換,隻能用在 nat 表的 PREROUTIONG 和 OUTPUT 鍊中,或者是被這兩條鍊調用的鍊裡面。包含 DNAT 的鍊不能被除此之外的其他鍊調用,比如 POSTROUTING 鍊。

阻止通路某域名,直接改hosts檔案即可了,也不知道用的多不多!!!

本文轉自 lgpqdwjh 51CTO部落格,原文連結:http://blog.51cto.com/itchenyi/1061828,如需轉載請自行聯系原作者

繼續閱讀