使用此簡單腳本使用iptables創建自己的防火牆

一段時間以來,我一直在思考關於iptables的兩件事:大多數正在尋找這些教程的人是初學者,其次,許多人已經在尋找相當簡單且已經詳細闡述的東西。

此示例適用於Web服務器,但是您可以輕鬆添加更多規則並使其適應您的需求。

當您看到ip的“ x”更改時


#!/bin/bash

#我們清理iptables表-F iptables -X#我們清理NAT iptables -t nat -F iptables -t nat -X#修改PPPoE,PPP和ATM iptables的表-t mangle -F iptables -t mangle -X #策略我認為這對初學者來說是最好的方法,並且#仍然不錯,我將解釋所有輸出,因為它們是傳出的連接#輸入我們會丟棄所有內容,並且任何服務器都不應轉發。 iptables -P輸入下降iptables -P輸出接受iptables -P轉發下降#Intranet LAN intranet = eth0 #Extranet wan Extranet = eth1#保持狀態。 已連接(建立)的所有內容都像這樣:iptables -A INPUT -m state --state ESTABLISHED,相關-j ACCEPT#循環設備。 iptables -A INPUT -i lo -j ACCEPT#http,https,我們未指定接口,因為#我們希望它適用於所有iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp-dport 443 -j ACCEPT#僅在內部以及ip iptables範圍內的ssh -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT#監控例如它們是否具有zabbix或其他一些snmp服務iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet -dport 10050 -j ACCEPT#icmp,ping iptables -A INPUT -p icmp -s 192.168。 xx / 24-i $ intranet -j ACCEPT #mysql with postgres是端口5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmail bueeeh如果要發送一些郵件#iptables -A輸出-p tcp --dport 25 -j接受#防欺騙09年07月2014日#SERVER_IP =“ 190.xxx”#服務器IP-服務器的真實局域網IP LAN_RANGE =“ 192.168.xx /您的網絡或VLAN的21“#LAN範圍#IP永遠不要進入Extranet,如果我們有一個純WAN接口,則將使用#邏輯,它永遠不應通過該接口輸入#LAN類型的流量SPOOF_IPS =“ 0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0 .16 / XNUMX“#默認操作-在任何規則與ACTION =” DROP“匹配時執行。#通過wan iptables與我的服務器的IP相同的數據包-A INPUT -i $ Extranet -s $ SERVER_IP -j $ ACTION# iptables -A OUTPUT -o $ Extranet -s $ SERVER_IP -j $ ACTION#與WAN的LAN範圍有關的數據包,如果您有#任何特定的網絡,我就這樣說,但這是多餘的,其中包含以下#規則iptables -A INPUT -i $ Extranet -s $ LAN_RANGE -j $ ACTION的iptables -A OUTPUT -o $ Extranet -s $ LAN_RANGE -j $ ACTION ##的所有SPOOF網絡都是廣域網不允許ip輸入的$ SPOOF_IPS做iptables -A輸入-i $ Extranet -s $ ip -j $操作iptables -A輸出-o $ Extranet -s $ ip -j $操作完成

一如既往,我一直在等待您的評論,請繼續關注此博客,謝謝


本文內容遵循我們的原則 編輯倫理。 要報告錯誤,請單擊 這裡.

12條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   HO2Gi 他說:

    它幫助我繼續學習多一點的感謝。

    1.    布羅迪·戴勒 他說:

      不用客氣,很高興能為您提供幫助

  2.   澤維爾 他說:

    真的很抱歉,但是我有兩個問題(和禮物😉):

    您是否打算使用此配置來運行Apache並關閉除SSH以外的其餘部分?

    #我們清理桌子
    的iptables-F
    的iptables-X

    我們清理NAT

    iptables -t nat -F
    iptables -t nat -X

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

    僅在內部和此IP範圍內使用ssh

    iptables -A輸入-p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j接受

    第二個問題:在此示例中,SSH是否使用7659端口?

    第三,也是最後一個:此配置應保存在哪個文件中?

    非常感謝您的教程,可惜您是這樣的新手,不能很好地利用它。

    1.    布羅迪·戴勒 他說:

      這是您從apache獲取http的規則
      iptables -A INPUT -p tcp -dport 80 -j ACCEPT

      但您還需要聲明刪除默認策略(在腳本中)
      iptables -P INPUT DROP
      iptables -P OUTPUT ACCEPT
      iptables -P轉發掉

      這是因為如果您偏遠,它將把您扔掉。
      iptables -A INPUT -m state -state ESTABLISHED,RELATED -j ACCEPT

      如果7659是示例中該ssh的端口,默認情況下為22,儘管我建議您將端口更改為“不知名”
      伙計,我不知道,如您所願... firewall.sh並將其放置在rc.local(sh firewall.sh)中,以便它自動運行,這取決於您所使用的操作系統,在哪裡有文件您可以直接放置規則。

  3.   傑格 他說:

    嘿,您的腳本很好分析,……。您知道我如何拒絕用戶對特定網站的所有請求嗎?…。 但是這個網站有很多服務器…。

    1.    布羅迪·戴勒 他說:

      我建議其他選擇:
      1)您可以在您的DNS中創建一個假區域...
      2)您可以使用acl放置代理
      但是
      對於iptables來說,您可能會喜歡...並非總是最好的選擇(有更多方法)
      iptables -A INPUT -s blog.desdelinux.ne -j DROP
      iptables -A輸出-d blog.fromlinux.net -j DROP

      告訴我是否有效

  4.   澤維爾 他說:

    感謝您的回答,一切都清除了。 我之所以問這個端口,是因為我對使用7659感到驚訝,因為專用端口始於49152,它可能會干擾某些服務或某些功能。
    再次感謝您所做的一切,太好了!

    問候。

  5.   碳化矽 他說:

    BrodyDalle,我該如何與您聯繫? 您的腳本非常有趣。

    1.    布羅迪·戴勒 他說:
  6.   卡洛斯 他說:

    前一行“ iptables -A OUTPUT -o $ Extranet -s $ ip -j $ ACTION”是為了防止您自己的計算機進行欺騙? 還是有一些中毒的數據包進入並可能隨該中毒源一起離開,這就是為什麼該規則也包含在OUTPUT中的原因?
    非常感謝您的澄清!!!

  7.   弗蘭 他說:

    這是我自己的iptables腳本,非常完整:

    #franes.iptables.airoso
    #doc.iptables.airoso:舊版和nft的iptables
    #
    #防火牆端口
    ##########################
    #!/斌/慶典
    #
    #清除屏幕
    ##############################開始/etc/f-iptables/default.cfg |||||
    明確
    #將行留空
    錯過
    出口是=»»否=»迴聲»
    #您可以更改以允許訪問的變量
    ######################變量用$ yes或$ no修改
    出口hayexcepciones =»$否»
    #有例外:$ yes允許例外主機,$ no禁用
    出口乾草= = $否»
    #hayping:$是允許對第三方執行ping操作,$ no拒絕
    出口haylogserver =»$否»
    #haylogeosserver:$是,可以記錄tcp $否,不能記錄tcp
    ######
    ######################變量以添加«,»或«:»範圍進行修改
    導出例外=»baldras.wesnoth.org»
    #例外允許來自防火牆的單個或多個主機或沒有值
    導出日誌服務器=丟棄,ipp,dict,ssh
    #數據包進入時記錄的tcp服務器端口
    導出redserver = 0/0
    #redserver:服務器端口的網絡最好是本地網絡或幾個ips
    導出客戶端紅色= 0/0
    #clientnet:客戶端端口的網絡優於所有網絡
    出口servidortcp =丟棄,ipp,字典,6771
    #servidortcp:指定的tcp服務器端口
    導出serverudp =丟棄
    #udpserver:指定的udp服務器端口
    導出clientudp =域,bootpc,bootps,ntp,20000:45000
    #udp客戶端:指定的udp客戶端端口
    導出clienttcp =域,http,https,ipp,git,dict,14999:15002
    #tcp client:指定的tcp客戶端端口
    /etc/f-iptables/default.cfg的##############################結尾
    ##############################變量結尾
    導出防火牆= $ 1變量= $ 2
    if [“ $變量” =“ $ NULL”]; 然後獲取/etc/f-iptables/default.cfg;
    else source / etc / f-iptables / $ 2; 科幻
    #############################,否則您將使用.cfg文件覆蓋變量
    ############################################### ########################################
    導出防火牆= $ 1導出變量= $ 2
    ########################################自動系統變量
    如果[“ $防火牆” =“已斷開”]; 然後回顯防火牆斷開;
    導出activateserver =»$ no»activateclient =»$ no»濕=»$ no»;
    elif [“ $防火牆” =“客戶端”];然後回顯防火牆客戶端;
    導出activateserver =»$ no»activateclient =»»濕=»$ no»;
    elif [“ $防火牆” =“服務器”]; 然後回顯防火牆服務器;
    導出activateserver =»»activateclient =»$ no»濕=»$ no»;
    elif [“ $防火牆” =“客戶端和服務器”]; 然後回顯防火牆客戶端和服務器;
    導出激活服務器=»»; 出口activateclient =»»;出口濕== $$»;
    elif [“ $ firewall” =“ permissive”]; 然後回顯PERMISSIVE FIREWALL;
    導出activateserver =»$否»activateclient =»$否»濕=»»;
    其他
    $檢查sudo echo iptables-legacy:
    $檢查sudo iptables-legacy -v -L INPUT
    $檢查sudo iptables-legacy -v -L OUTPUT
    $檢查sudo echo iptables-nft:
    $檢查sudo iptables-nft -v -L INPUT
    $檢查sudo iptables-nft -v -L輸出
    回波_____參數____ $ 0 $ 1 $ 2
    echo“不帶參數的廣播就是列出iptables。”
    echo“第一個參數(啟用iptables):斷開連接或客戶端或服務器或客戶端和服務器或允許的。”
    echo“第二個參數:(可選):默認的.cfg文件選擇/etc/f-iptables/default.cfg”
    迴聲“變量設置:” $(ls / etc / f-iptables /)
    出口0; 科幻
    #################
    錯過
    echo拋出$ 0斷開連接或客戶端或服務器或客戶端和服務器或許可或變量,或者不使用參數列出iptables。
    echo $ 0文件內部包含一些可編輯變量。
    ###############################以上變量已激活
    ###############################
    迴聲設置iptables變量
    迴聲激活變量
    錯過
    ############################ iptables規則
    echo設置iptables-legacy
    sudo / usr / sbin / iptables-legacy -t過濾器-F
    須藤/ usr / sbin / iptables-legacy -t nat -F
    須藤/ usr / sbin / iptables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -t filter -F
    須藤/ usr / sbin / ip6tables-legacy -t nat -F
    須藤/ usr / sbin / ip6tables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
    sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $例外情況-j ACCEPT> / dev / null
    $激活服務器sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $激活服務器sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –sports $ clientudp -m state-狀態已建立-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –sports $ clienttcp -m state -state建立狀態-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-r​​eply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-legacy -A輸出-s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $例外情況-j ACCEPT> / dev / null
    $激活sudo服務器/ usr / sbin / iptables-legacy -A輸出-p udp -m多端口–體育$ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $激活服務器sudo / usr / sbin / iptables-legacy -A輸出-p tcp -m多端口–體育$ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A輸出-p udp -m多端口–dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp –icmp-type echo-r​​equest -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
    echo iptables-legacy已啟用
    錯過
    迴聲設置iptables-nft
    sudo / usr / sbin / iptables-nft -t過濾器-F
    須藤/ usr / sbin / iptables-nft -t nat -F
    須藤/ usr / sbin / iptables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -t過濾器-F
    須藤/ usr / sbin / ip6tables-nft -t nat -F
    須藤/ usr / sbin / ip6tables-nft -t mangle -F
    須藤/ usr / sbin / ip6tables-nft -A輸入-j DROP
    須藤/ usr / sbin / ip6tables-nft -A輸出-j DROP
    sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
    sudo / usr / sbin / iptables-nft -A輸入-s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $例外情況-j ACCEPT> / dev / null
    $激活服務器sudo / usr / sbin / iptables-nft -A輸入-p udp -m多端口–dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $激活服務器sudo / usr / sbin / iptables-nft -A輸入-p tcp -m多端口-dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –sports $ clientudp -m state-狀態已建立-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m state -state建立狀態-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp類型的echo-r​​eply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A輸出-s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $例外-j ACCEPT> / dev / null
    $激活sudo服務器/ usr / sbin / iptables-nft -A輸出-p udp -m多端口–體育$ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $激活服務器sudo / usr / sbin / iptables-nft -A輸出-p tcp -m多端口–運動$ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ enable client sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A輸出-p tcp -m多端口–dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A輸出-p icmp –icmp類型的echo-r​​equest -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A輸出-j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echo iptables-nft已啟用
    錯過
    $濕sudo / usr / sbin / iptables-legacy -F> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -m state -state建立狀態-j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
    $濕sudo / usr / sbin / iptables-nft -F> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -m狀態–狀態已建立-j ACCEPT> / dev / null
    $濕sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
    $濕sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    #########################
    回顯您拋出的錯誤$ 0 $ 1 $ 2
    #退出腳本
    退出0

  8.   路易斯·杜蘭 他說:

    如果該防火牆將其用於我的網關並且在局域網中有一個烏賊,我將如何設置規則?