<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    iptable使用詳解

    VSole2022-12-09 09:10:52

    聲明:本人堅決反對利用文章內容進行惡意攻擊行為,一切錯誤行為必將受到懲罰,綠色網絡需要靠我們共同維護,推薦大家在了解技術原理的前提下,更好的維護個人信息安全、企業安全、國家安全。

    iptables的前身叫ipfirewall(內核1.x時代),這是一個作者從freeBSD上移植過來的,能夠工作在內核當中的,對數據包進行檢測的一款簡易訪問控制工具。但是ipfirewall工作功能極其有限(它需要將所有的規則都放進內核當中,這樣規則才能夠運行起來,而放進內核,這個做法一般是極其困難的)。當內核發展到2.x系列的時候,軟件更名為ipchains,它可以定義多條規則,將他們串起來,共同發揮作用,而現在,它叫做iptables,可以將規則組成一個列表,實現絕對詳細的訪問控制功能。

    他們都是工作在用戶空間中,定義規則的工具,本身并不算是防火墻。它們定義的規則,可以讓在內核空間當中的netfilter來讀取,并且實現讓防火墻工作。而放入內核的地方必須要是特定的位置,必須是tcp/ip的協議棧經過的地方。而這個tcp/ip協議棧必須經過的地方,可以實現讀取規則的地方就叫做 netfilter.(網絡過濾器)。

    為什么已經在進出的口設置了關卡之后還要在內部設置關卡呢?由于數據包尚未進行路由決策,還不知道數據要走向哪里,所以在進出口是沒辦法實現數據過濾的。所以要在內核空間里設置轉發的關卡,進入用戶空間的關卡,從用戶空間出去的關卡。

    這五個位置被稱為五個鉤子函數(hookfunctions),也叫五個規則鏈。這是NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。

    • PREROUTING (路由前)
    • INPUT (數據包流入口)
    • FORWARD (轉發關卡)
    • OUTPUT(數據包出口)
    • POSTROUTING(路由后)

    iptable常用策略

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

    使用最多的3個功能如下所示:

    filter :定義允許或者不允許的,只能做在3個鏈上:INPUT ,FORWARD ,OUTPUT

    nat:定義地址轉換的,只能做在3個鏈上:PREROUTING ,OUTPUT ,POSTROUTING

    mangle:修改報文原數據,是5個鏈都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

    環境安裝

    安裝iptables管理命令$ yum -y install iptables-services
    加載防火墻的內核模塊$ modprobe ip_tables$ modprobe iptable_filter$ modprobe iptable_nat$ modprobe ip_conntrack$ modprobe ip_conntrack_ftp$ modprobe ip_nat_ftp$ modprobe ipt_state$ lsmod |egrep 'filter|nat|ipt'  # 查看已經加載的模塊
    啟動iptables$ systemctl stop firewalld && systemctl disable firewalld$ systemctl start iptables && systemctl enable iptables
    

    基礎命令

    (1)iptable幫助信息

    -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:顯示幫助信息;
    

    (2)查看iptables規則

    $ iptables -L    # 查看iptables規則$ iptables -L -vn   # 查看iptables規則(詳細信息)
    $ iptables -L -t nat                  # 列出 nat 上面的所有規則 -t 參數指定,必須是 raw, nat,filter,mangle 中的一個$ iptables -L -t nat  --line-numbers  # 規則帶編號$ iptables -L INPUT
    

    (3)清空iptables規則

    $ iptables -F   # 清除所有規則,不會處理默認的規則$ iptables -X   # 刪除用戶自定義的鏈$ iptables -Z   # 鏈的計數器清零(數據包計數器與數據包字節計數器)
    

    (4)添加iptables規則

    $ iptables -t   # 指定表(default: `filter')$ iptables -A   # 把規則添加到指定的鏈上,默認添加到最后一行$ iptables -I   # 插入規則,默認插入到第一行(封IP)$ iptables -D   # 刪除鏈上的規則
    

    (5)刪除某條規則

    $ iptables -nL --line-numbers   # 查看規則號碼$ iptables -D INPUT 1           # 刪除指定鏈上的指定序號
    

    (6)保存iptables規則

    $ iptables-save > 1.txt  #將防火墻規則保存到文件中$ iptables-save  #將防火墻規則保存到配置文件中,防止重啟后失效$ iptables-restore < 1.txt #從配置文件里載入防火墻配置
    注意:你所定義的所有內容,當你重啟的時候都會失效,要想我們能夠生效,需要使用一個命令將它保存起來1.service iptables save 它會保存在/etc/sysconfig/iptables這個文件中2.iptables-save 命令iptables-save > /etc/sysconfig/iptables
    3.iptables-restore 命令開機的時候,它會自動加載/etc/sysconfig/iptabels如果開機不能加載或者沒有加載,而你想讓一個自己寫的配置文件(假設為iptables.2)手動生效的話:iptables-restore < /etc/sysconfig/iptables.2則完成了將iptables中定義的規則手動生效
    

    黑/白名單配置

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

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

    (2)設置默認規則

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

    (3)配置白名單

    $ 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端
    

    (4)配置黑名單

    $ iptables -I INPUT -p tcp -s 192.168.1.253 -i ens33 -j DROP$ iptables -A INPUT -p tcp ! -s 192.168.1.1 -i ens33 -j DROP$ iptables -A INPUT -p tcp ! -s 192.168.1.0/24 -i ens33 -j DROP
    選項解釋:-s # 指定源地址或網段(192.168.1.0/24)。! 取反;-d # 指定目的地址(nat表prerouting);-i # 進入的網絡接口(ens33,ens37);-o # 出去的網絡接口(ens33,ens37);
    

    (5)訪問端口

    $ iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP$ iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT    # 3306端口-8809端口$ iptables -I INPUT -p tcp --dport 18:80 -j DROP$ 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     # 禁止其他未允許的規則訪問
    

    DNAT/SNAT映射配置

    在傳統的標準的TCP/IP通信過程中,所有的路由器僅僅是充當一個中間人的角色,也就是通常所說的存儲轉發,路由器并不會對轉發的數據包進行修改,更為確切的說,除了將源MAC地址換成自己的MAC地址以外,路由器不會對轉發的數據包做任何修改。NAT (Network Address Translation,網絡地址轉換)恰恰是出于某種特殊需要而對數據包的源ip地址、目標ip地址、源端口、目標端口進行改寫的操作。利用iptables的內置表NAT可以實現上述功能

    iptables NAT的三個鏈:PREROUTING,POSTROUTING,OUTPUT

    PREROUTING:可以在這里定義進行目標地址NAT的規則,因為路由器進行路由時只檢查數據包的目標ip地址,所以為了使數據包得以正確路由,我們必須在路由之前就進行目的NAT

    POSTROUTING:可以在這里定義進行源地址NAT的規則,系統在決定了數據包的路由以后在執行該鏈中的規則

    OUTPUT:定義對本地產生的數據包的目的NAT規則

    NAT處理的動作選項

    SNAT:源地址轉換,改變數據包的源地址,常接選項--to-sourceDNAT:目標址轉換,改變數據包的目標地址,常接選項--to-destinationMASQUERADE:地址偽裝,適用于ADSL等動態撥號上網的IP偽裝REDIRECT:端口映射,通常用實現透明代理和對外開放內網某些服務,常接選項--to-ports
    

    三個鏈支持的處理動作

    PRERROUTING:DNAT,REDIRECT  對目標地址進行修改,支持-o選項(路由之前)POSTROUTING:SNAT,MASQUERADE  對源地址進行修改,支持-i選項(路由之后)OUTPUT:DNAT,REDIRECT     處理來自NAT主機本身生成的出站數據包(本機)    
    

    注意:要實現NAT,首先要打開核心轉發功能

    [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
    

    如果永久生效的話,編輯/etc/sysctl.conf文件,修改成net.ipv4.ip_forward = 1,然后執行sysctl -p可以立即生效

    (1)SNAT:隱藏內網主機ip地址,也可以實現共享公網ip上網

    源地址是192.168.1.0/24轉化成172.16.8.9

    # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 172.16.8.9
    

    (2)DNAT:可以通過公網ip訪問局域網內的服務

    訪問172.16.8.9的80端口時,會映射到192.168.1.9的8080端口

    # iptables -t nat -A PREROUTING -d 172.16.8.9 -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.9:8080
    

    (3)MASQUERADE:ADSL撥號上網,可以認為是SNAT的一種特殊情況(轉換地址是動態的)

    # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    

    4.REDIRECT:在本機上進行端口映射,可以認為是DNAT的一種特殊情況(目標地址是本機)

    訪問本機21端口時,會被映射到2121端口

    # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j REDIRECT --to-ports 2121
    

    場景應用

    $ 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=yesconnect_from_port_20=YES$ iptables -I INPUT -p tcp --dport 21 -j ACCEPT $ vi /etc/vsftpd/vsftpd.conf # 建議使用 ftp 被動模式pasv_min_port=50000pasv_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
    

    注意事項

    1) 修改之前導出備份一份;

    2)修改時小心,別把自己的IP地址封禁;

    3) 可以先在定時任務中添加一條定時清空的規則,等測試沒有問題再取消定時任務;

    iptablesinput
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    iptables常用命令總結
    2023-04-18 10:08:25
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT:允許通過 SSH 連接進入系統,前提是 SSH 服務已經開啟并監聽在 22 端口上。iptables -D INPUT 2:刪除 INPUT 鏈中的第二條規則。iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT:限制 HTTP 流量,最多允許 10 個并發連接,超過限制則拒絕連接。確保自己已經備份了原始的 iptables 配置,以防止在操作過程中出現意外情況,導致系統無法訪問網絡。避免在 iptables 中使用 ACCEPT 命令,因為 ACCEPT 會接受所有的數據包,包括惡意數據包,容易被攻擊者利用。
    ?iptables由上而下,由Tables,Chains,Rules組成
    你加密的壓縮包比你想象中的還不安全! 哪怕對于信息安全人員來說,很多時候給壓縮包加上一個密碼就以為的是萬事大吉了。但事實是,很多情況下,你的加密壓縮包,遠遠沒有你想象的安全。
    根據挖礦病毒行為特征,編寫專殺腳本,批量處置內網700多臺服務器
    iptable使用詳解
    2022-12-09 09:10:52
    而放入內核的地方必須要是特定的位置,必須是tcp/ip的協議棧經過的地方。這五個位置被稱為五個鉤子函數,也叫五個規則鏈。這是NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。為了讓這些功能交替工作,制定出了“表”這個定義,來定義、區分各種不同的工作功能和處理方式。
    網絡拓撲場景介紹局域網下含有物理機、proxy server主機。物理機即普通客戶主機,proxy server即企業提供的代理,此網絡模擬的是公網環境。
    黑客為了得到更多的算力資源,一般都會對全網進行無差別掃描,同時利用SSH爆破和漏洞利用等手段攻擊主機。部分挖礦木馬還具備蠕蟲化的特點,在主機被成功入侵之后,挖礦木馬還會向內網滲透,并在被入侵的服務器上持久化駐留以獲取最大收益。
    挖礦木馬會占用CPU進行超頻運算,從而占用主機大量的CPU資源,嚴重影響服務器上的其他應用的正常運行。黑客為了得到更多的算力資源,一般都會對全網進行無差別掃描,同時利用SSH爆破和漏洞利用等手段攻擊主機。
    近日,國家信息安全漏洞庫(CNNVD)收到關于Linux和FreeBSD內核多個安全漏洞(CNNVD-201906-681、CVE-2019-11477)(CNNVD-201906-682、CVE-2019-11478)(CNNVD-201906-683、CVE-2019-11479)(CNNVD-201906-703、CVE-2019-5599)情況的報送。攻擊者可以遠程利用這些漏洞,造成Lin
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类