この簡単なスクリプトを使用して、iptablesで独自のファイアウォールを作成します

私はしばらくの間、iptablesについてXNUMXつのことを考えていました。これらのチュートリアルを探している人のほとんどは初心者であり、次に、多くの人がすでにかなり単純で精巧なものを探しています。

この例はWebサーバー用です、ただし、ルールを簡単に追加して、ニーズに合わせることができます。

IPの「x」の変更が表示されたら


#!/bin/bash

#iptablesテーブルをクリーンアップします-F iptables -X#NATiptablesをクリーンアップします-tnat -F iptables -t nat -X#PPPoE、PPP、ATMなどのマングルテーブルiptables -t mangle -F iptables -t mangle -X #ポリシーこれは初心者にとって最良の方法だと思いますが、#それでも悪くはありません。出力はすべて発信接続であるため、#すべてを説明します。入力はすべて破棄し、サーバーは転送しないでください。 iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1#状態を保持します。 すでに接続されている(確立されている)ものはすべて、次のように残されます。iptables-A INPUT -m state --state ESTABLISHED、RELATED -j ACCEPT#ループデバイス。 iptables -A INPUT -i lo -j ACCEPT#http、https、インターフェイスを指定しません。#すべてのiptablesに対応させたいためです。-AINPUT-p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT#sshは内部でのみ、この範囲のipのiptablesから-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-AINPUT -p icmp -s192.168。 xx / 24-i $イントラネット-jACCEPT #mysql with postgres is port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPT #sendmailbueeehメールを送信する場合#iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT#アンチスプーフィング09年07月2014日#SERVER_IP = "190.xxx"#サーバーIP-サーバーの実際のwan ip LAN_RANGE = "192.168.xx / 21 "#ネットワークまたはvlanのLAN範囲#エクストラネットに入らないようにするIp、純粋に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 "#WANiptablesを介したサーバーの同じIPを持つパケット-AINPUT -i $ extranet -s $ SERVER_IP -j $ ACTION# iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION#WANのLAN範囲を含むパケット。特定のネットワークがある場合に備えて、このように配置します。#これは冗長であり、内部に次のルールがあります。ループ "for" iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ##すべてのSPOOFネットワークはWANfor ipinで許可されていません$ SPOOF_IPS do iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION done

いつものように私はあなたのコメントを待っています、このブログでお楽しみに、ありがとう


記事の内容は、次の原則に準拠しています。 編集倫理。 エラーを報告するには、 ここで.

12コメント、あなたのコメントを残してください

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   HO2Gi

    コピーされた感謝をもう少し学び続けるのに役立ちます。

    1.    ブロディ・ダル

      どういたしまして、お役に立ててうれしいです

  2.   ザビエル

    本当に申し訳ありませんが、XNUMXつの質問(およびギフト😉)があります:

    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 INPUT -p tcp -s 192.168.xx / 24 -i $イントラネット–dport 7659 -j ACCEPT

    7659番目の質問:この例では、XNUMXはSSHで使用されているポートですか?

    そしてXNUMX番目で最後:この構成はどのファイルに保存する必要がありますか?

    チュートリアルをありがとうございました、あなたがそのような初心者であり、それをうまく利用できないのは残念です。

    1.    ブロディ・ダル

      これは、Apacheからのhttpに必要なルールです。
      iptables -A INPUT -p tcp –dport 80 -j ACCEPT

      ただし、ドロップデフォルトポリシーを宣言する必要もあります(スクリプト内にあります)
      iptables -P入力ドロップ
      iptables -P OUTPUT ACCEPT
      iptables -Pフォワードドロップ

      そしてこれは、あなたが離れていると、あなたを捨ててしまうからです。
      iptables -A INPUT -m state –state ESTABLISHED、RELATED -j ACCEPT

      例で7659がそのsshのポートである場合、デフォルトでは22ですが、「よく知られていない」ポートに変更することをお勧めします。
      男私は知りません、あなたが望むように...ファイアウォール.shそしてあなたはそれが自動的に実行されるようにrc.local(shファイアウォール.sh)にそれを置きます、それはあなたが持っているオペレーティングシステムに依存します、あなたがいるファイルがありますルールを直接置くことができます。

  3.   ジェゲ

    ねえ、あなたのスクリプトはとても良いです、それを分析します…。ユーザーから特定のウェブサイトへのすべてのリクエストを拒否する方法を知っていますか?…。 しかし、このウェブサイトにはたくさんのサーバーがあります…。

    1.    ブロディ・ダル

      他のオプションをお勧めします:
      1)DNSに偽のゾーンを作成できます...
      2)ACLを使用してプロキシを配置できます
      罪の禁輸
      iptablesの場合、これを気に入っていただけます...これが常に最良のオプションであるとは限りません(他にも方法があります)
      iptables -A INPUT -s blog.desdelinux.ne -j DROP
      iptables -A OUTPUT -d blog.fromlinux.net -j DROP

      それがうまくいったかどうか教えてください

  4.   ザビエル

    答えてくれてありがとう、すべてが片付けられた。 プライベートポートは7659から始まり、サービスなどに干渉する可能性があるため、49152を使用して驚いたので、ポートについて質問していました。
    繰り返しますが、すべてに感謝します、それは素晴らしいです!

    ご挨拶。

  5.   原文のまま

    BrodyDalle、どうすればあなたと連絡を取ることができますか? 非常に興味深いスクリプトです。

    1.    ブロディ・ダル
  6.   カルロス

    最後の行の前の「iptables-AOUTPUT -o $ extranet -s $ ip -j $ ACTION」は、自分のマシンがなりすましを防ぐためのものですか? または、ポイズニングされたパケットが入り、そのポイズニングされたソースとともに出て行く可能性があります。そのため、ルールはOUTPUTにも含まれていますか?
    ご説明ありがとうございます!!!

  7.   フラン

    これは私自身のiptablesスクリプトであり、非常に完全です。

    #franes.iptables.airoso
    #doc.iptables.airoso:レガシーおよびnft用のiptables
    #
    #ファイアウォールポート
    ############################
    #!/ bin / bashに
    #
    #画面をクリアする
    ############################### / etc / f-iptables / default.cfgの開始|||||
    クリア
    #空白行を残す
    echo
    エクスポートはい=»»いいえ=»エコーオフ»
    #アクセスを許可するために変更できる変数
    ###################### $ yesまたは$ noで変更する変数
    hayexcepcionesのエクスポート=»$いいえ»
    #例外があります:例外的なホストを許可する場合は$ yes、無効にする場合は$ no
    干し草の輸出=»$いいえ»
    #hayping:$ yesはサードパーティのpingを許可し、$ noは拒否します
    haylogserverのエクスポート=»$ no»
    #haylogeosserver:$ yesはtcpをログに記録できます$ noはtcpをログに記録できません
    ######
    ######################「、」を追加するか、「:」の範囲で変更する変数
    エクスポートの例外=»baldras.wesnoth.org»
    #例外は、ファイアウォールからの単一または複数のホストを許可するか、値を許可しません
    エクスポートログサーバー=破棄、ipp、dict、ssh
    #パケットが到着したときにログに記録されるtcpサーバーポート
    エクスポートredserver = 0/0
    #redserver:サーバーポートのネットワーク推奨ローカルネットワークまたは複数のIP
    クライアントの赤をエクスポート= 0/0
    #clientnet:すべてのネットワークよりも望ましいクライアントポートのネットワーク
    servidortcpのエクスポート=破棄、ipp、dict、6771
    #servidortcp:指定されたtcpサーバーポート
    serverudpのエクスポート=破棄
    #udpserver:指定されたudpサーバーポート
    export clientudp = domain、bootpc、bootps、ntp、20000:45000
    #udp client:指定されたudpクライアントポート
    export clienttcp = domain、http、https、ipp、git、dict、14999:15002
    #tcpクライアント:指定されたtcpクライアントポート
    ############################## / etc / f-iptables / default.cfgの終わり|||||
    ###############################変更する変数の終わり
    ファイアウォールのエクスポート= $ 1変数= $ 2
    if ["$変数" = "$ NULL"]; 次に、ソース/etc/f-iptables/default.cfg;
    else source / etc / f-iptables / $ 2; fi
    ###############################または、変数を.cfgファイルで上書きします
    ################################################## ##########################################
    ファイアウォールのエクスポート= $ 1エクスポート変数= $ 2
    #########################################自動システム変数
    if ["$ファイアウォール" = "切断"]; 次に、FIREWALLDISCONNECTEDをエコーし​​ます。
    export activateserver =»$ no»activateclient =»$ no»wet =»$ no»;
    elif ["$ Firewall" = "client"];次にechoFIREWALL CLIENT;
    export activateserver =»$ no»activateclient =»»wet =»$ no»;
    elif ["$ファイアウォール" = "サーバー"]; 次に、FIREWALLSERVERをエコーし​​ます。
    エクスポートアクティベートサーバー=»»アクティベートクライアント=»$ no»wet =»$ no»;
    elif ["$ファイアウォール" = "クライアントとサーバー"]; 次に、FIREWALL CLIENT ANDSERVERをエコーし​​ます。
    エクスポートアクティベートサーバー=»»; export activateclient =»»; export wet =»$ no»;
    elif ["$ファイアウォール" = "許容"]; 次に、PERMISSIVEFIREWALLをエコーし​​ます。
    export activateserver =»$ no»activateclient =»$ no»wet =»»;
    ほかに
    $ check sudo echo iptables-レガシー:
    $ check sudo iptables-legacy -v -L INPUT
    $ check sudo iptables-legacy -v -L OUTPUT
    $ check sudo echo iptables-nft:
    $ check sudo iptables-nft -v -L INPUT
    $ check sudo iptables-nft -v -L OUTPUT
    エコー_____parameters____ $ 0 $ 1 $ 2
    echo "パラメータなしでキャストするとiptablesが一覧表示されます。"
    echo "最初のパラメーター(iptablesを有効にする):切断またはクライアントまたはサーバーまたはクライアントとサーバーまたは許容。"
    echo "XNUMX番目のパラメーター:(オプション):デフォルトの.cfgファイルは/etc/f-iptables/default.cfgを選択します"
    echo "変数設定:" $(ls / etc / f-iptables /)
    出口0; fi
    #################
    echo
    echo $ 0が切断されているか、クライアントまたはサーバーまたはクライアントとサーバーまたは許容または変数をスローするか、パラメーターを使用してiptablesをリストしません。
    echo $ 0ファイルには、編集可能な変数がいくつか含まれています。
    #################################上記の変数がアクティブ化されました
    #################################
    iptables変数を設定するエコー
    エコー起動変数
    echo
    ############################ iptablesルール
    エコー設定iptables-レガシー
    sudo / usr / sbin / iptables-legacy -t filter -F
    sudo / usr / sbin / iptables-legacy -t nat -F
    sudo / usr / sbin / iptables-legacy -t mangle -F
    sudo / usr / sbin / ip6tables-legacy -t filter -F
    sudo / usr / sbin / ip6tables-legacy -t nat -F
    sudo / 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 $ exceptions -j ACCEPT> / dev / null
    $ activate sudo server / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activate server 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 –state found -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –sports $ clienttcp -m state –stateestablished -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 OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ exceptions -j ACCEPT> / dev / null
    $ activate sudo server / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport –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
    echoiptables-レガシーが有効
    echo
    エコー設定iptables-nft
    sudo / usr / sbin / iptables-nft -t filter -F
    sudo / usr / sbin / iptables-nft -t nat -F
    sudo / usr / sbin / iptables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -t filter -F
    sudo / usr / sbin / ip6tables-nft -t nat -F
    sudo / usr / sbin / ip6tables-nft -t mangle -F
    sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A OUTPUT -j DROP
    sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
    sudo / usr / sbin / iptables-nft -A INPUT -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 $ exceptions -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –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 –state Establishment-s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m state –stateestablished -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-r​​eply -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
    $ hayeexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $ exceptions -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activate server sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
    $ activateclient 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 OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
    $ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type echo-r​​equest -j ACCEPT> / dev / null
    sudo / usr / sbin / iptables-nft -A OUTPUT -j DROP
    sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
    echoiptables-nftが有効
    echo
    $ wet 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 –stateestablished -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
    $ wet 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 state –stateestablished -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
    $ wet sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
    ###########################
    あなたが投げたエコー$ 0 $ 1 $ 2
    #スクリプトを終了します
    0番出口

  8.   ルイス・デュラン

    このファイアウォールがゲートウェイにルールを使用し、LAN内にイカがいる場合、どのようにルールを設定しますか?