私はしばらくの間、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
いつものように私はあなたのコメントを待っています、このブログでお楽しみに、ありがとう
コピーされた感謝をもう少し学び続けるのに役立ちます。
どういたしまして、お役に立ててうれしいです
本当に申し訳ありませんが、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番目で最後:この構成はどのファイルに保存する必要がありますか?
チュートリアルをありがとうございました、あなたがそのような初心者であり、それをうまく利用できないのは残念です。
これは、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)にそれを置きます、それはあなたが持っているオペレーティングシステムに依存します、あなたがいるファイルがありますルールを直接置くことができます。
ねえ、あなたのスクリプトはとても良いです、それを分析します…。ユーザーから特定のウェブサイトへのすべてのリクエストを拒否する方法を知っていますか?…。 しかし、このウェブサイトにはたくさんのサーバーがあります…。
他のオプションをお勧めします:
1)DNSに偽のゾーンを作成できます...
2)ACLを使用してプロキシを配置できます
罪の禁輸
iptablesの場合、これを気に入っていただけます...これが常に最良のオプションであるとは限りません(他にも方法があります)
iptables -A INPUT - のブログ。desdelinux.ne -j ドロップ
iptables -A OUTPUT -d ブログ。desdelinux.net -j ドロップ
それがうまくいったかどうか教えてください
答えてくれてありがとう、すべてが片付けられた。 プライベートポートは7659から始まり、サービスなどに干渉する可能性があるため、49152を使用して驚いたので、ポートについて質問していました。
繰り返しますが、すべてに感謝します、それは素晴らしいです!
ご挨拶。
BrodyDalle、どうすればあなたと連絡を取ることができますか? 非常に興味深いスクリプトです。
soulofmarionet_1@hotmail.com
最後の行の前の「iptables-AOUTPUT -o $ extranet -s $ ip -j $ ACTION」は、自分のマシンがなりすましを防ぐためのものですか? または、ポイズニングされたパケットが入り、そのポイズニングされたソースとともに出て行く可能性があります。そのため、ルールはOUTPUTにも含まれていますか?
ご説明ありがとうございます!!!
これは私自身の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-reply -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-request -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-reply -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-request -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番出口
このファイアウォールがゲートウェイにルールを使用し、LAN内にイカがいる場合、どのようにルールを設定しますか?