Iptables 原理
現在防火牆主要分以下三種類型:包過濾、應用代理、狀態檢測
包過濾防火牆:現在靜態包過濾防火牆市面上已經看不到了,取而代之的是動態包過濾技術的防火牆哈~
代 理防火牆:因一些特殊的報文***可以輕鬆突破包過濾防火牆的保護,比如大家知道的 SYN***、ICMP 洪水***,所以以代理服務器作爲專門爲用戶保密或者突破訪問限制的數據轉發通道的應用代理防火牆出現了哈~其使用了一種應用協議分析的新技術。 狀態檢測防火牆:其基於動態包過濾技術發展而來,加入了一種狀態檢測的模塊,進一點發展了會話過濾功能,會話狀態的保留是有時間限制的,此防火牆還可以對 包的內容進行分析,從而避免開放過多的端口。
netfilter/iptables IP 數據包過濾系統實際上由 netfilter 和 iptables 兩個組件構成。
netfilter 是集成在內核中 的一部分,其作用是定義、保存相應的規則,而 iptables 是一種工具,用來修改信息的過濾規則及其他配置,我們可以通過 iptables 來設置一些適合我們企業需求環境的規則哈~,而這些規則會保存在內核空間之中。 netfilter 是 Linux 核心中的一個通用架構,其提 供了一系列的表(tables),每個表由若干個鏈(chains)組成,而每條鏈可以由一條或若干條規則(rules)組成。實際上 netfilter 是表的容器,表是鏈的容器,而鏈又是規則的容器。
filter 表
nat表
mangle 表
iptables 內置鏈
PREROUTING:數據包進入本機,進入路由器之前
INPUT :通過路由表後目的地爲本機
FORWARDING:通過路由表後,目的地不爲本機
OUTPUT:由本機產生,向外轉發
POSTROUTIONG:通過路由表後,發送到網卡接口之前
netfilter 五條鏈相互關係,即 iptables 數據包轉發流程圖
Iptables 工作流程圖
iptables 擁有三個表和五條鏈組成
NAT 工作原理
Iptables 詳細參數表
Iptables 基本語法
iptables [-t 表名] -命令 -匹配 -j 動作/目標
iptables 內置了 filter、nat 和 mangle 三張表,我們可以使用-t 參數來設置對哪張表生效哈~也可以省略-t 參數,則默認對 filter 表進行操作。
具體命令參數可以通過 man iptables查詢哈~
配置 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
公司網絡拓撲圖如下:
2、配置默認策略
所 有內網計算機需要經常訪問互聯網,並且員工會使用即時通信工具與客戶進行溝通,企業網絡DMZ 隔離區搭建有 Mail、FTP 和 Web 服務器,其中 Mail 和 FTP 服務器對內部員工開放,僅需要對外發布 Web 站點,並且管理員會通過外網進行遠程管理,爲了保證整個網絡的安全性,需要添加 iptables 防火牆並配置相應的策略
需求分析
企業的內部網絡爲了保證安全性,需要首先刪除所有規則設置,並將默認規則設置爲 DROP,然後開啓防火牆對於客戶端的訪問限制,打開 WEB、MSN、QQ 及 MAIL 的相應端口,並允許外部客戶端登錄 WEB 服務器的 80、22 端口。
解決方案
1、配置默認策略
默認 iptables 已經被安裝好了
(1)刪除策略
iptables -F :清空所選鏈中的規則,如果沒有指定鏈則清空指定表中所有鏈的規則
iptables -X :清除預設表 filter 中使用者自定鏈中的規則
iptables -Z :清除預設表 filter 中使用者自定鏈中的規則
(2)設置默認策略
設 置默認策略爲關閉 filter 表的 INPPUT 及 FORWARD 鏈開啓 OUTPUT 鏈,nat 表的三個鏈PREROUTING、OUTP UT、POSTROUTING 全部開啓哈~默認全部鏈都是開啓的,所以有些命令可以不操作,另外 mangle 表本文沒用到,所以不做處理,mangle 主要用在數據包的特殊變更處理上,比如修改 TOS 等特性。
2、設置迴環地址
有些服務的測試需要使用迴環地址,爲了保證各個服務的正常工作,需要允許迴環地址的通信,己有涉及,如果不設置迴環地址,有些服務不能啓動哈~。
iptables -A INPUT -i lo -j ACCEPT
3、連接狀態設置
爲了簡化防火牆的配置操作,並提高檢查的效率,需要添加連接狀態設置
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEP T
連接跟蹤存在四種數據包狀態
NEW :想要新建連接的數據包
INVALID :無效的數據包,例如損壞或者不完整的數據包
ESTABLISHED :已經建立連接的數據包
RELATED :與已經發送的數據包有關的數據包
4、設置 80 端口轉發
公司網站需要對外開放,所以我們需要開放 80 端口
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
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
6、允許訪問服務器的 SSH
管理員會通過外網進行遠程管理,所以我們要開啓 SSH 使用的 TCP 協議 22 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
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 服務器地址,根據總結,最好在企業實際配置中技術與行政管理相結合,這樣達到的效果最好~
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
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 是特殊的過濾規則,其只可以映射從一個接口到另一個接口的數據哈~
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
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
如果要在服務或系統重啓後依然生效
12、最終 iptables 配置如下 nat可以自己查看下!
注意:
SNAT 將源網絡地址進行轉換,只能用在 nat 表的 POSTROUTING 鏈中,只要連接的第一個符合條件的包被 SNAT 了哈~,那麼這個連接的其他所有的數據包都會自動地被 SNAT。與 SNAT 對應,DNAT將目的地址進行轉換,只能用在 nat 表的 PREROUTIONG 和 OUTPUT 鏈中,或者是被這兩條鏈調用的鏈裏面。包含 DNAT 的鏈不能被除此之外的其他鏈調用,比如 POSTROUTING 鏈。
阻止訪問某域名,直接改hosts文件即可了,也不知道用的多不多!!!