iptables的使用

iptables的基本使用

四表五鏈

四表
    filter表——過濾數據包(肯定是否放行數據包)
    Nat表——用於網絡地址轉換(IP、端口)(修改數據包的源/目標地址或端口)
    Mangle表——修改數據包的服務類型、TTL、而且能夠配置路由實現QOS(爲數據包設置標記)
    Raw表——決定數據包是否被狀態跟蹤機制處理(肯定是否對數據包進行狀態跟蹤)

    五鏈
    INPUT鏈——進來的數據包應用此規則鏈中的策略
    OUTPUT鏈——外出的數據包應用此規則鏈中的策略
    FORWARD鏈——轉發數據包時應用此規則鏈中的策略
    PREROUTING鏈——對數據包做路由選擇前應用此鏈中的規則(全部的數據包進來的時侯都先由這個鏈處理)
    POSTROUTING鏈——對數據包做路由選擇後應用此鏈中的規則(全部的數據包出來的時侯都先由這個鏈處理)

包過濾匹配流程

規則順序對比,匹配則中止(LOG除外),沒有匹配按默認規則處理。
    表之間的順序:
    raw ——> mangle ——> net ——> filter
    鏈之間的順序
    入站:PREROUTING ——> INPUT
    出站:OUTPUT ——> POSTROUTING
    轉發:PREROUTING ——> FORWARD ——> POSTROUTING

目標動做:

ACCEPT  容許經過
    DROP    直接丟棄,不給出任何迴應
    REJECT  拒絕經過,會給出提示
    LOG 記錄日誌(匹配則中止規則的惟一例外)

iptables經常使用選項

添加規則
                -A 在鏈的末尾追加一條規則
                -I 在鏈的開頭或者指定序號插入一條規則
    查看規則
                -L 列出全部規則
                -n 以數字形式顯示地址、端口等信息
                --line-numbers 顯示規則的序號(iptables -nL --line)
    刪除規則
                -D 刪除指定序號的一條規則
                -F 清空全部的規則
    默認策略
                -P 爲指定的鏈設置默認規則

iptables基本匹配條件

通用匹配
            協議匹配 -p 協議名
            地址匹配 -s 源地址、-d 目標地址
            接口匹配 -i 接收數據的網卡、-o 發送數據的網卡
    隱含匹配
            端口匹配 --sport 源端口、-dport目標端口
            ICMP類型匹配 --icmp-type ICMP類型
            TCP標記匹配 --tcp-flags 檢查哪些位被設置
    擴展匹配
            狀態匹配 -m state --state狀態值
            MAC地址匹配 -m mac --mac-source MAC地址
            多端口匹配  -m multiport --sports 源端口列表
                       -m multiport --dports 目標端口列表
            IP範圍匹配  -m iprange --src-range IP1-IP2
                       -m iprange --dst-range IP1-IP2

擴展匹配的狀態跟蹤機制

網絡鏈接的物種狀態:
 NEW   請求創建鏈接的包,徹底陌生的包。
 ESTABLISHED   將要或已經創建鏈接的包。
 RELATED   與已知某個鏈接相關聯的包。
 INVALID   無對應鏈接,以及鏈接無效的包。
 UNTRACKED   未跟蹤狀態包。

開啓內核路由轉發功能

sysctl -w net.ipv4.ip_forward=1
     或者
     echo 1 > /proc/sys/net/ipv4/ip_forward

iptables基本使用示例

iptables [-t 表名] 選項 [鏈名] [條件] [-j目標動做]
    不指定表默認爲filter表
    不指定鏈默認爲全部鏈

設置默認規則

全部鏈初始默全部規則爲ACCEPT
    iptables -t filter -P INPUT DROP(設置爲默認拒絕全部,此規則慎用......)

主機防禦,針對入站訪問的源地址

iptables -A INPUT -s 172.30.1.53 -j DROP
    iptables -A INPUT -s 192.168.1.0/24 -j DROP

網絡防禦,針對轉發訪問的原地址

iptables -A FORWARD -s 172.30.1.53 -i eth1 -j DROP 
    iptables -A FORWARD -s 192.168.1.0/24 -i eth1 -j DROP

容許特定的IP訪問80端口

iptables -A INPUT -s 172.30.1.53 -p tcp --dport 80 -j ACCEPT  
    iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

容許全部訪問80端口

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

拒絕全部訪問80端口

iptables -A INPUT -p tcp --dport 80 -j DROP

插入一條規則在第二行 (若是不指序號,則默認插入到第一行)

iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT

刪除第二行

iptables -D INPUT 2

禁ping策略限制

禁止其餘主機ping本機

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    iptables -A INPUT -p icmp ! --icmp-type echo-request -j ACCEPT

容許本機ping其餘主機

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A OUTPUT -p icmp ! --icmp-type echo-request -j DROP

丟棄陌生的TCP響應包

iptables -A INPUT -m state --state NEW -p tcp ! --syn -j DROP 
    iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

識別FTP數據鏈接,

iptables -A FORWARD -d 172.30.1.53 -p tcp --dport 20:21 -j ACCEPT  
    iptables -A FORWARD -s 172.30.1.53 -p tcp --dport 20:21 -j ACCEPT

針對FTP被動模式

iptables -A FORWARD -d 172.30.1.53 -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -s 172.30.1.53 -m state --state ESTABLISHED,RELATED -j ACCEPT

根據MAC地址封鎖主機

iptables -A INPUT -m mac --mac-source 00:0C:29:74:BE:21 -j DRIP

一條規則開放多個端口

iptables -A INPUT -p tcp -m multiport --dports 20:25,80,110,143,3306,10051, -j ACCEPT 
     (21:25 表明21到25 冒號表示連續 ,21,25表明 21和25 逗號則爲分隔符 )

根據IP範圍封鎖主機

iptables -A INPUT -p tcp --dport 3306 -m iprange --src-range 192.168.1.10-192.168.1.20 -j DROP

NAT 防火牆,

須要打開內核 ip 轉發 (sysctl -w net.ipv4.ip_forward=1)

POSTROUTING 源地址假裝

經過假裝 192.168.4.0 網段的機器上網,首先防火牆本機能夠訪問互聯網
iptables -t nat -A POSTROUTING -s 192.168.4.0 -j SNAT --to-source 防火牆外網ip地址

PERROUTING 目的地址轉換

全部訪問防火牆 10022 端口的請求都轉發給後端的 192.168.4.15 的 22 端口
iptables -t nat -A PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.4.15:22

注意:

iptables 不是服務,只是生效規則或者清空規則,規則關機重置。
把它定義成service 是爲了讓他開機自動生效規則,
想要永久生效保存規則:service iptables save
規則會被保存至/etc/sysconfig/iptables 文件中,start 時會讀取此文件中的規則,

iptables-save > /path/to/some_rulefile 保存iptables規則至別的位置,
iptables-restore < /path/to/some_rulefile 從自定義的位置讀取iptables規則並使之生效。

全部鏈初始默全部規則爲ACCEPT

iptables -t filter -P INPUT DROP(設置爲默認拒絕全部,此規則慎用......)
在設置此規則以前應該先容許重要的規則,好比ssh的端口。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -F  若不指定表,默認只清空filter表,(默認規則爲DROP時,此規則慎用......)
在默認規則爲DROP時,默認爲拒絕全部,若是這個時候再iptables -F 清空filter開放的規則,這個時候會斷開全部鏈接。

記住iptables 匹配即中止的特性,否則一不當心就掉坑裏了.........
不說了,我買火車票去了.
相關文章
相關標籤/搜索