<span id="vexk9"><table id="vexk9"></table></span>

      iptables

      Linux上常用的防火墻軟件

      補充說明

      iptables命令 是Linux上常用的防火墻軟件,是netfilter項目的一部分。可以直接配置,也可以通過許多前端和圖形界面配置。

      語法

      iptables(選項)(參數)
      

      選項

      -t, --table table 對指定的表 table 進行操作, table 必須是 raw, nat,filter,mangle 中的一個。如果不指定此選項,默認的是 filter 表。
      
      # 通用匹配:源地址目標地址的匹配
      -p:指定要匹配的數據包協議類型;
      -s, --source [!] address[/mask] :把指定的一個/一組地址作為源地址,按此規則進行過濾。當后面沒有 mask 時,address 是一個地址,比如:192.168.1.1;當 mask 指定時,可以表示一組范圍內的地址,比如:192.168.1.0/255.255.255.0。
      -d, --destination [!] address[/mask] :地址格式同上,但這里是指定地址為目的地址,按此進行過濾。
      -i, --in-interface [!] <網絡接口name> :指定數據包的來自來自網絡接口,比如最常見的 eth0 。注意:它只對 INPUT,FORWARD,PREROUTING 這三個鏈起作用。如果沒有指定此選項, 說明可以來自任何一個網絡接口。同前面類似,"!" 表示取反。
      -o, --out-interface [!] <網絡接口name> :指定數據包出去的網絡接口。只對 OUTPUT,FORWARD,POSTROUTING 三個鏈起作用。
      
      # 查看管理命令
      -L, --list [chain] 列出鏈 chain 上面的所有規則,如果沒有指定鏈,列出表上所有鏈的所有規則。
      
      # 規則管理命令
      -A, --append chain rule-specification 在指定鏈 chain 的末尾插入指定的規則,也就是說,這條規則會被放到最后,最后才會被執行。規則是由后面的匹配來指定。
      -I, --insert chain [rulenum] rule-specification 在鏈 chain 中的指定位置插入一條或多條規則。如果指定的規則號是1,則在鏈的頭部插入。這也是默認的情況,如果沒有指定規則號。
      -D, --delete chain rule-specification -D, --delete chain rulenum 在指定的鏈 chain 中刪除一個或多個指定規則。
      -R num:Replays替換/修改第幾條規則
      
      # 鏈管理命令(這都是立即生效的)
      -P, --policy chain target :為指定的鏈 chain 設置策略 target。注意,只有內置的鏈才允許有策略,用戶自定義的是不允許的。
      -F, --flush [chain] 清空指定鏈 chain 上面的所有規則。如果沒有指定鏈,清空該表上所有鏈的所有規則。
      -N, --new-chain chain 用指定的名字創建一個新的鏈。
      -X, --delete-chain [chain] :刪除指定的鏈,這個鏈必須沒有被其它任何規則引用,而且這條上必須沒有任何規則。如果沒有指定鏈名,則會刪除該表中所有非內置的鏈。
      -E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的鏈。這并不會對鏈內部造成任何影響。
      -Z, --zero [chain] :把指定鏈,或者表中的所有鏈上的所有計數器清零。
      
      -j, --jump target <指定目標> :即滿足某條件時該執行什么樣的動作。target 可以是內置的目標,比如 ACCEPT,也可以是用戶自定義的鏈。
      -h:顯示幫助信息;
      

      基本參數

      | 參數 | 作用 | | ---- | ---- | | -P | 設置默認策略:iptables -P INPUT (DROP|ACCEPT) | | -F | 清空規則鏈 | | -L | 查看規則鏈 | | -A | 在規則鏈的末尾加入新規則 | | -I | num 在規則鏈的頭部加入新規則 | | -D | num 刪除某一條規則 | | -s | 匹配來源地址IP/MASK,加嘆號"!"表示除這個IP外。 | | -d | 匹配目標地址 | | -i | 網卡名稱 匹配從這塊網卡流入的數據 | | -o | 網卡名稱 匹配從這塊網卡流出的數據 | | -p | 匹配協議,如tcp,udp,icmp | | --dport num | 匹配目標端口號 | | --sport num | 匹配來源端口號 |

      命令選項輸入順序

      iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網卡名> -p 協議名 <-s 源IP/源子網> --sport 源端口 <-d 目標IP/目標子網> --dport 目標端口 -j 動作
      

      工作機制

      規則鏈名包括(也被稱為五個鉤子函數(hook functions)):

      防火墻的策略

      防火墻策略一般分為兩種,一種叫策略,一種叫策略,通策略,默認門是關著的,必須要定義誰能進。堵策略則是,大門是洞開的,但是你必須有身份認證,否則不能進。所以我們要定義,讓進來的進來,讓出去的出去,所以通,是要全通,而堵,則是要選擇。當我們定義的策略的時候,要分別定義多條功能,其中:定義數據包中允許或者不允許的策略,filter過濾的功能,而定義地址轉換的功能的則是nat選項。為了讓這些功能交替工作,我們制定出了“表”這個定義,來定義、區分各種不同的工作功能和處理方式。

      我們現在用的比較多個功能有3個:

      1. filter 定義允許或者不允許的,只能做在3個鏈上:INPUT ,FORWARD ,OUTPUT
      2. nat 定義地址轉換的,也只能做在3個鏈上:PREROUTING ,OUTPUT ,POSTROUTING
      3. mangle功能:修改報文原數據,是5個鏈都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

      我們修改報文原數據就是來修改TTL的。能夠實現將數據包的元數據拆開,在里面做標記/修改內容的。而防火墻標記,其實就是靠mangle來實現的。

      小擴展:

      iptables/netfilter(這款軟件)是工作在用戶空間的,它可以讓規則進行生效的,本身不是一種服務,而且規則是立即生效的。而我們iptables現在被做成了一個服務,可以進行啟動,停止的。啟動,則將規則直接生效,停止,則將規則撤銷。

      iptables還支持自己定義鏈。但是自己定義的鏈,必須是跟某種特定的鏈關聯起來的。在一個關卡設定,指定當有數據的時候專門去找某個特定的鏈來處理,當那個鏈處理完之后,再返回。接著在特定的鏈中繼續檢查。

      注意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。

      表名包括:

      動作包括:

                                   ┏???????????????┓
       ┌───────────────┐           ┃    Network    ┃
       │ table: filter │           ┗━━━━━━━┳━━━━━━━┛
       │ chain: INPUT  │?────┐             │
       └───────┬───────┘     │             ▼
               │             │   ┌───────────────────┐
        ┌      ▼      ┐      │   │ table: nat        │
        │local process│      │   │ chain: PREROUTING │
        └             ┘      │   └─────────┬─────────┘
               │             │             │
               ▼             │             ▼              ┌─────────────────┐
      ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅    │     ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅      │table: nat       │
       Routing decision      └───── outing decision ─────?│chain: PREROUTING│
      ┅┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅┅          ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅      └────────┬────────┘
               │                                                   │
               ▼                                                   │
       ┌───────────────┐                                           │
       │ table: nat    │           ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅               │
       │ chain: OUTPUT │    ┌─────? outing decision ?──────────────┘
       └───────┬───────┘    │      ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅
               │            │              │
               ▼            │              ▼
       ┌───────────────┐    │   ┌────────────────────┐
       │ table: filter │    │   │ chain: POSTROUTING │
       │ chain: OUTPUT ├────┘   └──────────┬─────────┘
       └───────────────┘                   │
                                           ▼
                                   ┏???????????????┓
                                   ┃    Network    ┃
                                   ┗━━━━━━━━━━━━━━━┛
      

      實例

      清空當前的所有規則和計數

      iptables -F  # 清空所有的防火墻規則
      iptables -X  # 刪除用戶自定義的空鏈
      iptables -Z  # 清空計數
      

      配置允許ssh端口連接

      iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
      # 22為你的ssh端口, -s 192.168.1.0/24表示允許這個網段的機器來連接,其它網段的ip地址是登陸不了你的機器的。 -j ACCEPT表示接受這樣的請求
      

      允許本地回環地址可以正常使用

      iptables -A INPUT -i lo -j ACCEPT
      #本地圓環地址就是那個127.0.0.1,是本機上使用的,它進與出都設置為允許
      iptables -A OUTPUT -o lo -j ACCEPT
      

      設置默認的規則

      iptables -P INPUT DROP # 配置默認的不讓進
      iptables -P FORWARD DROP # 默認的不允許轉發
      iptables -P OUTPUT ACCEPT # 默認的可以出去
      

      配置白名單

      iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT  # 允許機房內網機器可以訪問
      iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT  # 允許機房內網機器可以訪問
      iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允許183.121.3.7訪問本機的3380端口
      

      開啟相應的服務端口

      iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 開啟80端口,因為web對外都是這個端口
      iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允許被ping
      iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已經建立的連接得讓它進來
      

      保存規則到配置文件中

      cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改動之前先備份,請保持這一優秀的習慣
      iptables-save > /etc/sysconfig/iptables
      cat /etc/sysconfig/iptables
      

      列出已設置的規則

      iptables -L [-t 表名] [鏈名]

      iptables -L -t nat                  # 列出 nat 上面的所有規則
      #            ^ -t 參數指定,必須是 raw, nat,filter,mangle 中的一個
      iptables -L -t nat  --line-numbers  # 規則帶編號
      iptables -L INPUT
      
      iptables -L -nv  # 查看,這個列表看起來更詳細
      

      清除已有規則

      iptables -F INPUT  # 清空指定鏈 INPUT 上面的所有規則
      iptables -X INPUT  # 刪除指定的鏈,這個鏈必須沒有被其它任何規則引用,而且這條上必須沒有任何規則。
                         # 如果沒有指定鏈名,則會刪除該表中所有非內置的鏈。
      iptables -Z INPUT  # 把指定鏈,或者表中的所有鏈上的所有計數器清零。
      

      刪除已添加的規則

      # 添加一條規則
      iptables -A INPUT -s 192.168.1.5 -j DROP
      

      將所有iptables以序號標記顯示,執行:

      iptables -L -n --line-numbers
      

      比如要刪除INPUT里序號為8的規則,執行:

      iptables -D INPUT 8
      

      開放指定的端口

      iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允許本地回環接口(即運行本機訪問本機)
      iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允許已建立的或相關連的通行
      iptables -A OUTPUT -j ACCEPT         #允許所有本機向外的訪問
      iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允許訪問22端口
      iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允許訪問80端口
      iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允許ftp服務的21端口
      iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允許FTP服務的20端口
      iptables -A INPUT -j reject       #禁止其他未允許的規則訪問
      iptables -A FORWARD -j REJECT     #禁止其他未允許的規則訪問
      

      屏蔽IP

      iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP  # 屏蔽惡意主機(比如,192.168.0.8
      iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽單個IP的命令
      iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整個段即從123.0.0.1到123.255.255.254的命令
      iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即從123.45.0.1到123.45.255.254的命令
      iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即從123.45.6.1到123.45.6.254的命令是
      

      指定數據包出去的網絡接口

      只對 OUTPUT,FORWARD,POSTROUTING 三個鏈起作用。

      iptables -A FORWARD -o eth0
      

      查看已添加的規則

      iptables -L -n -v
      Chain INPUT (policy DROP 48106 packets, 2690K bytes)
       pkts bytes target     prot opt in     out     source               destination
       5075  589K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
       191K   90M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22
      1499K  133M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
      4364K 6351M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
       6256  327K ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
      
      Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
       pkts bytes target     prot opt in     out     source               destination
      
      Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
       pkts bytes target     prot opt in     out     source               destination
       5075  589K ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0
      

      啟動網絡轉發規則

      公網210.14.67.7讓內網192.168.188.0/24上網

      iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127
      

      端口映射

      本機的 2222 端口映射到內網 虛擬機的22 端口

      iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222  -j DNAT --to-dest 192.168.188.115:22
      

      字符串匹配

      比如,我們要過濾所有TCP連接中的字符串test,一旦出現它我們就終止這個連接,我們可以這么做:

      iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset
      iptables -L
      
      # Chain INPUT (policy ACCEPT)
      # target     prot opt source               destination
      # REJECT     tcp  --  anywhere             anywhere            STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset
      #
      # Chain FORWARD (policy ACCEPT)
      # target     prot opt source               destination
      #
      # Chain OUTPUT (policy ACCEPT)
      # target     prot opt source               destination
      

      阻止Windows蠕蟲的攻擊

      iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"
      

      防止SYN洪水攻擊

      iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT
      

      添加SECMARK記錄

      iptables -t mangle -A INPUT -p tcp --src 192.168.1.2 --dport 443 -j SECMARK --selctx system_u:object_r:myauth_packet_t
      # 向從 192.168.1.2:443 以TCP方式發出到本機的包添加MAC安全上下文 system_u:object_r:myauth_packet_t
      

      更多實例

      用iptables搭建一套強大的安全防護盾 http://www.imooc.com/learn/389

      iptables: linux 下應用層防火墻工具

      iptables 5鏈: 對應 Hook point netfilter: linux 操作系統核心層內部的一個數據包處理模塊 Hook point: 數據包在 netfilter 中的掛載點; PRE_ROUTING / INPUT / OUTPUT / FORWARD / POST_ROUTING

      iptables & netfilter

      iptables 4表5鏈

      iptables rules

      filter: 訪問控制 / 規則匹配 nat: 地址轉發 mangle / raw

      數據訪問控制: ACCEPT / DROP / REJECT 數據包改寫(nat -> 地址轉換): snat / dnat 信息記錄: log

      使用場景實例

      開放 tcp 10-22/80 端口 開放 icmp 其他未被允許的端口禁止訪問

      存在的問題: 本機無法訪問本機; 本機無法訪問其他主機

      ftp: 默認被動模式(服務器產生隨機端口告訴客戶端, 客戶端主動連接這個端口拉取數據) vsftpd: 使 ftp 支持主動模式(客戶端產生隨機端口通知服務器, 服務器主動連接這個端口發送數據)

      允許外網訪問: web http -> 80/tcp; https -> 443/tcp mail smtp -> 25/tcp; smtps -> 465/tcp pop3 -> 110/tcp; pop3s -> 995/tcp imap -> 143/tcp

      內部使用: file nfs -> 123/udp samba -> 137/138/139/445/tcp ftp -> 20/21/tcp remote ssh -> 22/tcp sql mysql -> 3306/tcp oracle -> 1521/tcp

      nat 轉發

      防CC攻擊

      iptables -L -F -A -D # list flush append delete
      # 場景一
      iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 允許 tcp 80 端口
      iptables -I INPUT -p tcp --dport 10:22 -j ACCEPT # 允許 tcp 10-22 端口
      iptables -I INPUT -p icmp -j ACCEPT # 允許 icmp
      iptables -A INPUT -j REJECT # 添加一條規則, 不允許所有
      
      # 優化場景一
      iptables -I INPUT -i lo -j ACCEPT # 允許本機訪問
      iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允許訪問外網
      iptables -I INPUT -p tcp --dport 80 -s 10.10.188.233 -j ACCEPT # 只允許固定ip訪問80
      
      # 場景二
      vi /etc/vsftpd/vsftpd.conf # 使用 vsftpd 開啟 ftp 主動模式
      port_enable=yes
      connect_from_port_20=YES
      iptables -I INPUT -p tcp --dport 21 -j ACCEPT
      
      vi /etc/vsftpd/vsftpd.conf # 建議使用 ftp 被動模式
      pasv_min_port=50000
      pasv_max_port=60000
      iptables -I INPUT -p tcp --dport 21 -j ACCEPT
      iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
      
      # 還可以使用 iptables 模塊追蹤來自動開發對應的端口
      
      # 場景三
      iptables -I INPUT -i lo -j ACCEPT # 允許本機訪問
      iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允許訪問外網
      iptables -I INPUT -s 10.10.155.0/24 -j ACCEPT # 允許內網訪問
      iptables -I INPUT -p tcp -m multiport --dports 80,1723 -j ACCEPT # 允許端口, 80 -> http, 1723 -> vpn
      iptables -A INPUT -j REJECT # 添加一條規則, 不允許所有
      
      iptables-save # 保存設置到配置文件
      
      # 場景四
      iptables -t nat -L # 查看 nat 配置
      
      iptables -t nat -A POST_ROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232 # SNAT
      vi /etc/sysconfig/network # 配置網關
      
      iptables -t nat -A POST_ROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.232:80 # DNAT
      
      #場景五
      iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT # 限制并發連接訪問數
      iptables -I INPUT -m limit --limit 3/hour --limit-burst 10 -j ACCEPT # limit模塊; --limit-burst 默認為5
      
      主站蜘蛛池模板: 色欲人妻综合AAAAA网| 伊人不卡久久大香线蕉综合影院| 狠狠色狠狠色综合日日不卡| 狠狠色狠狠色综合| 综合久久国产九一剧情麻豆| 天天做天天爱天天爽综合网| 色噜噜狠狠色综合免费视频| 激情综合色综合啪啪开心| 一本色道久久88亚洲综合| 国产综合免费精品久久久| 国产成+人+综合+亚洲专| 香蕉久久综合精品首页| 色与欲影视天天看综合网| 亚洲国产综合久久天堂| 色婷婷狠狠久久综合五月| 国产综合精品一区二区三区| 国产成人亚综合91精品首页| 色综合久久中文综合网| 久久综合琪琪狠狠天天| 亚洲综合激情另类专区| 天天做天天爱天天综合网2021| 99久久综合精品免费| 狠狠色狠狠色综合网| 国产一级a爱做综合| 婷婷综合缴情亚洲狠狠尤物| 欧美激情综合亚洲一二区| 91精品国产综合久久香蕉 | 色综合久久夜色精品国产| 国产成人精品综合久久久| 国产在线视频色综合| 色综合天天综合网国产国产人| AV狠狠色丁香婷婷综合久久| 五月丁香六月综合缴清无码| 色婷婷色综合激情国产日韩| 五月天婷亚洲天综合网精品偷| 色天天天综合色天天碰| 狠狠做深爱婷婷综合一区| 精品国产国产综合精品| 国产成人亚洲综合无码精品| 色婷婷综合久久久久中文 | 九九久久99综合一区二区|