1. 程式人生 > >iptables防火墻 (一)

iptables防火墻 (一)

接口 用戶 分享圖片 允許 詳細 列表 -o 現在 要求

Linux防火墻主要工作在網絡層,屬於典型的包過濾防火墻;

netfilter
位於Linux內核中的包過濾功能體系
稱為Linux防火墻的“內核態”
iptables
位於/sbin/iptables,用來管理防火墻規則的工具
稱為Linux防火墻的“用戶態”

-

—— 上述2種稱呼都可以表示Linux防火墻

包過濾的工作層次
主要是網絡層,針對IP數據包
體現在對包內的IP地址、端口等信息的處理上
技術分享圖片

  1. 規則鏈
    規則的作用:對數據包進行過濾或處理
    鏈的作用:容納各種防火墻規則
    鏈的分類依據:處理數據包的不同時機
    默認包括5種規則鏈
    1)INPUT:處理入站數據包
    2)OUTPUT:處理出站數據包
    3)FORWARD:處理轉發數據包
    4)POSTROUTING鏈:在進行路由選擇後處理數據包
    5)PREROUTING鏈:在進行路由選擇前處理數據包

-
2.規則表
表的作用:容納各種規則鏈
表的劃分依據:防火墻規則的作用相似
默認包括4個規則表
1)raw表:確定是否對該數據包進行狀態跟蹤
2)mangle表:為數據包設置標記
3)nat表:修改數據包中的源、目標IP地址或端口
4)filter表:確定是否放行該數據包(過濾)

默認的表、鏈結構示意圖
技術分享圖片

3.規則表之間的順序
raw?mangle?nat?filter
規則鏈之間的順序
1)入站:PREROUTING?INPUT
2)出站:OUTPUT?POSTROUTING
3)轉發:PREROUTING?FORWARD?POSTROUTING

規則鏈內的匹配順序
按順序依次檢查,匹配即停止(LOG策略例外)
若找不到相匹配的規則,則按該鏈的默認策略處理

匹配流程示意圖
技術分享圖片

語法構成
iptables [-t 表名] 選項 [鏈名] [條件] [-j 控制類型]

-

[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j REJECT

-

幾個註意事項
不指定表名時,默認指filter表
不指定鏈名時,默認指表內的所有鏈
除非設置鏈的默認策略,否則必須指定匹配條件
選項、鏈名、控制類型使用大寫字母,其余均為小寫

數據包的常見控制類型
ACCEPT:允許通過
DROP:直接丟棄,不給出任何回應

REJECT:拒絕通過,必要時會給出提示
LOG:記錄日誌信息,然後傳給下一條規則繼續匹配

添加新的規則
-A:在鏈的末尾追加一條規則
-I:在鏈的開頭(或指定序號)插入一條規則

**[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT

[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT

[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT**

查看規則列表
-L:列出所有的規則條目
-n:以數字形式顯示地址、端口等信息
-v:以更詳細的方式顯示規則信息
--line-numbers:查看規則時,顯示規則的序號

[root@localhost ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source        destination
1    ACCEPT     udp  --  anywhere      anywhere
2    ACCEPT     icmp --  anywhere      anywhere
3    REJECT     icmp --  anywhere      anywhere     reject-with icmp-port-unreachable
4    ACCEPT     tcp  --  anywhere      anywhere
**[root@localhost ~]# iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source          destination
ACCEPT     udp  --  0.0.0.0/0       0.0.0.0/0
ACCEPT     icmp --  0.0.0.0/0       0.0.0.0/0
REJECT     icmp --  0.0.0.0/0       0.0.0.0/0       reject-with icmp-port-unreachable
ACCEPT     tcp  --  0.0.0.0/0       0.0.0.0/0**

刪除、清空規則
-D:刪除鏈內指定序號(或內容)的一條規則
-F:清空所有的規則

[root@localhost ~]# iptables -D INPUT 3
[root@localhost ~]# iptables -n -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t nat -F
[root@localhost ~]# iptables -t mangle -F
[root@localhost ~]# iptables -t raw -F

設置默認策略
-P:為指定的鏈設置默認規則

[root@localhost ~]# iptables -t filter -P FORWARD DROP
[root@localhost ~]# iptables -P OUTPUT ACCEPT

常用管理選項匯總
技術分享圖片

通用匹配
可直接使用,不依賴於其他條件或擴展
包括網絡協議、IP地址、網絡接口等條件
隱含匹配
要求以特定的協議匹配作為前提
包括端口、TCP標記、ICMP類型等條件
顯式匹配
要求以“-m 擴展模塊”的形式明確指出類型
包括多端口、MAC地址、IP範圍、數據包狀態等條件

常見的通用匹配條件
協議匹配:-p 協議名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站網卡、-o 出站網卡

[root@localhost ~]# iptables -I INPUT -p icmp -j DROP
[root@localhost ~]# iptables -A FORWARD ! -p icmp -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
[root@localhost ~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP 

-

[root@localhost ~]# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP 
[root@localhost ~]# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
[root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

常用的隱含匹配條件
端口匹配:--sport 源端口、--dport 目的端口
TCP標記匹配:--tcp-flags 檢查範圍 被設置的標記
ICMP類型匹配:--icmp-type ICMP類型

[root@localhost ~]# iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp -j DROP

常用的顯式匹配條件
多端口匹配:-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
IP範圍匹配:-m iprange --src-range IP範圍
MAC地址匹配:-m mac --mac-source MAC地址
狀態匹配:-m state --state 連接狀態

[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -I INPUT -p tcp -m multiport --dport 80 -j  ACCEPT
[root@localhost ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT 

常見匹配條件匯總

技術分享圖片

iptables防火墻 (一)