1、防火牆基礎
linux防火牆主要工作在網絡層,針對TCP/IP資料包實施過濾和限制(包過濾防火牆或網絡層防火牆),linux防火牆
是基于核心編碼實作,具有非常穩定的性能和高效率
(1)netfilter:包過濾防火牆:包過濾防火牆是用一個軟體檢視所流經的資料包的標頭(header),由此決定整個包的命運。
它可能會決定丢棄(DROP)這個包,可能會接受(ACCEPT)這個包(讓這個包通過),也可能執行其它更複雜的動作。
工作于網絡層,能對IP資料報進行首部檢查。例如:IP源位址,目的位址,源端口和目的端口等。
核心态防火牆體系
(2) iptables:指的是用于管理linux防火牆的指令程式
使用者态防火牆體系
(3)iptables的表鍊結構
表
1)filter表:用來對資料包進行過濾,根據規則确定如何處理一個資料包
filter表對應的核心子產品是iptable_filter,表内包含3個鍊
INPUT FORWARD OUTPUT
2) net表:nat(Network Address Translation)網絡位址轉換
主要用來修改IP位址、端口号等資訊
net表對應的核心子產品是iptable_nat
PREROUTING POSTROUTING OUTPUT
3) mangle表:mangle表用來修改資料包的TOS服務類型、TTL生存周期、或者為資料包設定Mark标記
以實作流量整形、政策路由等進階應用
mangle表對應的核心子產品為iptable_mangle,表内含5個鍊
PREROUTING POSTROUTING INPUT OUTPUT FORWARD
4) raw表:主要用來決定是否對資料包進行狀态跟蹤
raw表對應的核心子產品為iptable_raw,表内包含兩個鍊
OUTPUT PREROUTING
鍊
1) INPUT鍊: 當收到通路防火牆本機位址的資料包(入站)時,應用此鍊中規則
2)OUTPUT鍊: 當防火牆本機向外發送資料包(出站)時,應用此鍊中規則
3)FORWARD鍊: 當接收到需要通過防火牆中轉發給其他位址的資料包(轉發)時,應用此鍊中規則
4)PREROUTING鍊:在對資料包做路由選擇之前,應用此鍊中規則
5)POSTROUTING鍊:在對資料包做路由器選擇之後,應用此鍊中規則
4表5鍊
INPUT OUTPUT 主要用在“主機型防火牆”主要針對伺服器本身進行保護
FORWARD PREROUTING POSTROUTING 多用在“網絡型防火牆”中,可以做linux防火牆的網管伺服器
在公司内網與網際網路之間進行安全控制
規則之間的順序
raw mangle nat filter
1)入站資料流向:來自外界的資料包到達防火牆後,首先被PREROUTING鍊處理然後進行路由選擇
(判斷該資料包應該發往何處),如果資料包的目标位址是防火牆本機,那麼
核心将其傳遞給INPUT鍊處理
2)轉發資料流向:如果資料包的目标位址是其它外部位址,則核心将其傳遞給FORWARD鍊進行處理
(允許轉發或攔截、丢棄),最後交給POSTROUTING(是否修改資料包位址等)進行處理
3)出站資料流向:首先OUTPUT鍊處理,然後進行路由選擇,再交給POSTROUTING鍊
(是否修改資料包的位址等),進行處理
4)每條鍊内的規則(比對即停止)如果第一條通過了後續的規則将失效
2、編寫防火牆規則
iptables -t 表名 管理選項 鍊名 比對條件 -j 控制類型
ACCEPT 允許資料包通過
DROP 丢棄資料包
REJECT 拒絕資料包,必要時會給資料端發送一個相應資訊
LOG 在/var/log/messages 檔案中記錄日志資訊,然後将資料包傳遞給下一條規則
因為LOG隻是一種輔助動作,是以“比對即停止”,對LOG是個特例,還會繼續比對
iptables 指令的常用的幾個管理選項
-A 在指定鍊的末尾添加一條新的規則
-D 删除指定鍊中的規則,可指定序号或具體内容
-I 在指定鍊中插入一條新的規則,未指定序号預設作為第一條規則
-R 修改、替換
-L 列出規則 list
-F 清空規則
-P 設定指定鍊的預設規則
-n 使用數字形式顯示輸出結果
-v 檢視規則清單顯示詳細資訊
-h 檢視指令幫助資訊
--line-numbers 檢視規則清單時,同時顯示規則在鍊中的序号
1、其它主機無法ping通主機
iptables -t filter -I INPUT -p icmp -j REJECT
2、在INPUT鍊末尾添加一條允許tcp協定通過的規則
iptables -t filter -A INPUT -p tcp -j ACCEPT
3、在filter表INPUT鍊添加位于表中排序第一的規則和排序第二的規則
iptables -t filter -I INPUT -p udp -j ACCEPT
iptables -t filter -I INPUT 2 -p icmp -j ACCEPT
4、檢視規則清單
iptables -L INPUT --line-numbers
iptables -n -L INPUT (資料多用這個減少解析時間)
5、删除清空清單
iptables -D INPUT 3 #删除filter表INPUT鍊的第3條資訊
iptables -F INPUT #清空file表INPUT鍊中的所有資訊
iptables -F #清空filter表
iptables -t nat -F #清空nat表
iptables -t mangle -F #清空mangle表
6、設定預設政策
filter表FORWARD預設政策為丢棄,OUTPUT鍊預設政策為允許
iptables -t filter -P FORWARD DROP
iptables -P OUTPUT ACCEPT
7、通用比對
協定比對
若要丢棄通過icmp協定通路防火牆本機的資料包,允許轉發經過防火牆出icmp以外的的資料包
iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD ! -P icmp -j ACCEPT
位址比對
若要拒絕轉發源位址為192.168.1.11的資料,允許轉發源位址位于192.168.7.0/24網段的資料
iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT
若檢測到來自某個網段(10.20.30.0/24)的頻繁掃描添加防火牆進行封鎖
iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -I FORWARD -s 10.20.30.0/24 -j DROP
網絡接口比對
若要丢棄外網接口(eth1)通路防火牆本機且源位址為私有位址的資料包
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
端口比對
若要允許為網段192.168.4.0/24轉發DNS查詢資料包
iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
建構vsftpd伺服器時,若要開放20.21端口,以及用于被動模式的端口範圍24500~24600
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT
ICMP類型比對 #icmp-type檢查icmp協定
iptables -A INPUT -p icmp --icmp-type 8 -j DROP #拒絕其他請求但是自己可以ping其它機器
iptables -A INPUT -p icmp --icmp-type 0 -j DROP #我ping其它的主機傳回來的資訊我接收
iptables -A INPUT -p icmp --icmp-type 3 -j DROP #對方不存在傳回值我接收
iptables -A INPUT -p icmp -j DROP #禁止所有機器ping
顯示比對
若要允許本機開放25.80.110.143端口
iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
IP範圍比對
若要禁止轉發源IP位址位于192.168.4.21與192.168.4.28之間的tcp資料包
iptables -A FORWARD -p tcp -m iprange -src-range 192.168.4.21-192.168.4.28 -j REJECT
MAC位址比對 -m 子產品
若要根據MAC位址封鎖主機,禁止其通路本機的任何應用
iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -DROP
狀态比對
若要禁止轉發與正常TCP連接配接無關的非--syn請求的資料包
iptables -A FORWARD -m state --state NEW -p tcp !--syn -j DROP #無正常連接配接的狀态是NEW
#NEW狀态子產品的非syn選項
若隻開放本機的web服務(80端口)
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT #插入行首一條将有關聯的包放行
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #緊随其後添加一條允許80端口開放
iptables -P INPUT DROP #目前兩條規則都沒比對上執行預設規則丢棄資料包
本文轉自 大雪兒 51CTO部落格,原文連結:http://blog.51cto.com/dingxue/1974853,如需轉載請自行聯系原作者