iptables詳解 redhat5

Iptables原理
現在防火牆主要分以下三種類型:包過濾、應用代理、狀態檢測
包過濾防火牆:現在靜態包過濾防火牆市面上已經看不到了,取而代之的是動態包過濾技術的防火牆哈~
代理防火牆:因一些特殊的報文***可以輕鬆突破包過濾防火牆的保護,比如大家知道的SYN***、ICMP洪水***,所以以代理服務器作爲專門爲用戶保密或者突破訪問限制的數據轉發通道的應用代理防火牆出現了哈~其使用了一種應用協議分析的新技術。
狀態檢測防火牆:其基於動態包過濾技術發展而來,加入了一種狀態檢測的模塊,進一點發展了會話過濾功能,會話狀態的保留是有時間限制的,此防火牆還可以對包的內容進行分析,從而避免開放過多的端口。
netfilter/iptables IP數據包過濾系統實際上由netfilter和iptables兩個組件構成。netfilter是集成在內核中的一部分,其作用是定義、保存相應的規則,而iptables是一種工具,用來修改信息的過濾規則及其他配置,我們可以通過iptables來設置一些適合我們企業需求環境的規則哈~,而這些規則會保存在內核空間之中。
netfilter是Linux核心中的一個通用架構,其提供了一系列的表(tables),每個表由若干個鏈(chains)組成,而每條鏈可以由一條或若干條規則(rules)組成。實際上netfilter是表的容器,表是鏈的容器,而鏈又是規則的容器。
filter表
p_w_picpath
nat表
p_w_picpath
mangle表
p_w_picpath
iptables內置鏈
PREROUTING:數據包進入路由表之前
INPUT:通過路由表後目的地爲本機
FORWARDING:通過路由表後,目的地不爲本機
OUTPUT:由本機產生,向外轉發
POSTROUTIONG:發送到網卡接口之前
netfilter五條鏈相互關係,即iptables數據包轉發流程圖
p_w_picpath
Iptables工作流程圖
iptables擁有三個表和五條鏈組成
p_w_picpath
NAT工作原理
p_w_picpath
Iptables詳細參數表
Iptables詳細參數表大圖
Iptables基本語法
iptables [-t 表名] -命令 -匹配 -j 動作/目標
iptables內置了filter、nat和mangle三張表,我們可以使用-t參數來設置對哪張表生效哈~也可以省略-t參數,則默認對filter表進行操作。
具體命令參數可以通過man iptables查詢哈~
p_w_picpath
配置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.0.1 子網掩碼爲255.255.255.0
FTP服務器:IP地址爲192.168.0.2 子網掩碼爲255.255.255.0
WEB服務器:IP地址爲192.168.0.3 子網掩碼爲255.255.255.0
公司網絡拓撲圖如下:
p_w_picpath
2、配置默認策略
所有內網計算機需要經常訪問互聯網,並且員工會使用即時通信工具與客戶進行溝通,企業網絡DMZ隔離區搭建有Mail、FTP和Web服務器,其中Mail和FTP服務器對內部員工開放,僅需要對外發布Web站點,並且管理員會通過外網進行遠程管理,爲了保證整個網絡的安全性,需要添加iptables防火牆並配置相應的策略
需求分析
企業的內部網絡爲了保證安全性,需要首先刪除所有規則設置,並將默認規則設置爲DROP,然後開啓防火牆對於客戶端的訪問限制,打開WEB、MSN、QQ及MAIL的相應端口,並允許外部客戶端登錄WEB服務器的80、22端口。
解決方案
1、配置默認策略
默認iptables已經被安裝好了
p_w_picpath
(1)刪除策略
iptables -F:清空所選鏈中的規則,如果沒有指定鏈則清空指定表中所有鏈的規則
iptables -X:清除預設表filter中使用者自定鏈中的規則
iptables -Z:清除預設表filter中使用者自定鏈中的規則
p_w_picpath
(2)設置默認策略
設置默認策略爲關閉filter表的INPPUT及FORWARD鏈開啓OUTPUT鏈,nat表的三個鏈PREROUTING、OUTPUT、POSTROUTING全部開啓哈~默認全部鏈都是開啓的,所以有些命令可以不操作,另外mangle表本文沒用到,所以不做處理,mangle主要用在數據包的特殊變更處理上,比如修改TOS等特性。
p_w_picpath
p_w_picpath
2、設置迴環地址
有些服務的測試需要使用迴環地址,爲了保證各個服務的正常工作,需要允許迴環地址的通信,RHCE課程-RH253Linux服務器架設筆記二-NFS服務器配置己有涉及,如果不設置迴環地址,有些服務不能啓動哈~。
iptables -A INPUT -i lo -j ACCEPT
 p_w_picpath
3、連接狀態設置
爲了簡化防火牆的配置操作,並提高檢查的效率,需要添加連接狀態設置
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
連接跟蹤存在四種數據包狀態
NEW:想要新建連接的數據包
INVALID:無效的數據包,例如損壞或者不完整的數據包
ESTABLISHED:已經建立連接的數據包
RELATED:與已經發送的數據包有關的數據包
p_w_picpath
4、設置80端口轉發
公司網站需要對外開放,所以我們需要開放80端口
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
p_w_picpath
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
p_w_picpath 
6、允許訪問服務器的SSH
管理員會通過外網進行遠程管理,所以我們要開啓SSH使用的TCP協議22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
p_w_picpath
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
注意:當然,如果公司要限制這樣即時通信工具的使用,只要禁止這些端口的轉發就可以了哈~特別注意,馬化騰這傢伙忒壞~嘿嘿~,端口不固定,QQVIP會員專用通道什麼的,代理登錄等等哈~,所以我們如果需要封殺就要收集全登錄端口及QQ服務器地址,根據本人總結,最好在企業實際配置中技術與行政管理相結合,這樣達到的效果最好~0(^_^)0
p_w_picpath
8、允許內網主機收發郵件
客戶端發送郵件時訪問郵件服務器的TCP25端口。接收郵件時訪問,可能使用的端口則較多,UDP協議以及TCP協議的端口:110、143、993及995
smtp:
[root@rhel5 ~]# iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
pop3:
[root@rhel5 ~]# iptables -A FORWARD -p tcp --dport 110 -j ACCEPT
[root@rhel5 ~]# iptables -A FORWARD -p udp --dport 110 -j ACCEPT
imap:
[root@rhel5 ~]# iptables -A FORWARD -p tcp --dport 143 -j ACCEPT
[root@rhel5 ~]# iptables -A FORWARD -p udp --dport 143 -j ACCEPT
imaps:
[root@rhel5 ~]# iptables -A FORWARD -p tcp --dport 993 -j ACCEPT
[root@rhel5 ~]# iptables -A FORWARD -p udp --dport 993 -j ACCEPT
pop3s:
[root@rhel5 ~]# iptables -A FORWARD -p tcp --dport 995 -j ACCEPT
[root@rhel5 ~]# iptables -A FORWARD -p udp --dport 995 -j ACCEPT
p_w_picpath
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是特殊的過濾規則,其只可以映射從一個接口到另一個接口的數據哈~
p_w_picpath
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.0.3:80
p_w_picpath
11、保存與恢復iptables配置
保存:iptables-save
iptables-save [-c] [-t 表名]
-c:保存包和字節計數器的值。可以使在重啓防火牆後不丟失對包和字節的統計
-t:用來保存哪張表的規則,如果不跟-t參數則保存所有的表
可以使用重定向命令來保存這些規則集
iptables-save > /etc/iptables-save
恢復:iptables-restore
iptables-restore [-c] [-n]
-c:如果加上-c參數則表示要求裝入包和字節計數器
-n:表示不覆蓋己有的表或表內的規則,默認情況下是清除所有己存在的規則
使用重定向來恢復由iptables-save保存的規則集
iptables-restore > /etc/iptables-save
如果要在服務或系統重啓後依然生效
service iptables save
p_w_picpath
12、最終iptables配置如下
[root@rhel5 ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
Chain FORWARD (policy DROP)
target     prot opt source               destination        
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:msnp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:irdmi
ACCEPT     udp  --  anywhere             anywhere            udp dpt:irdmi
ACCEPT     udp  --  anywhere             anywhere            udp dpt:terabase
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3
ACCEPT     udp  --  anywhere             anywhere            udp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:imap
ACCEPT     udp  --  anywhere             anywhere            udp dpt:imap
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:imaps
ACCEPT     udp  --  anywhere             anywhere            udp dpt:imaps
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3s
ACCEPT     udp  --  anywhere             anywhere            udp dpt:pop3s
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
[root@rhel5 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination        
DNAT       tcp  --  anywhere             anywhere            tcp dpt:http to:192.168.0.3:80
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination        
MASQUERADE  all  --  192.168.0.0/24       anywhere           
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
[root@rhel5 ~]#
注意:
SNAT將源網絡地址進行轉換,只能用在nat表的POSTROUTING鏈中,只要連接的第一個符合條件的包被SNAT了哈~,那麼這個連接的其他所有的數據包都會自動地被SNAT。與SNAT對應,DNAT將目的地址進行轉換,只能用在nat表的PREROUTIONG和OUTPUT鏈中,或者是被這兩條鏈調用的鏈裏面。包含DNAT的鏈不能被除此之外的其他鏈調用,比如POSTROUTING鏈。
附:
我們可以通過設置禁止訪問具體域名和IP地址哈~
禁止訪問QQ主頁:
[root@rhel5 ~]# iptables -A FORWARD -d [url]www.qq.com[/url] -j DROP
禁止訪問指定IP地址:
[root@rhel5 ~]# iptables -A FORWARD -d 119.147.15.17 -j DROP
p_w_picpath
我們可以通過查找QQ的安裝目錄來獲取QQ服務器的地址和端口號哈~
 p_w_picpath
雖然有亂碼,但是還是可以看出來滴~利用域名過濾就可以了哈~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章