現在、httpおよびhttpsトラフィックを許可するためだけにiptablesファイアウォールを構成しています。それは機能していますが、特に奇妙なルールの下で-私は80の送信元ポートでの着信接続を許可する必要があります。
着信トラフィックの宛先ポートを80にするべきではないので、それは私には意味がありません。
以下は私の設定の例です。ポート80での着信トラフィックを許可するルールを削除すると、Googleなどにアクセスできなくなり、ルールをアクティブにするとすべて機能します。 Webサーバーはこのポートでリッスンし、ランダムなポートから送信するべきではありませんか?
# Set all major commands to DROP by default
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Allow HTTP and HTTPS
# Need to consider limiting to ESTABLISHED, RELATED for OUTPUT
# consider NEW for INPUT
# configure source ports in range 1024:65535
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m multiport --sports 80,443 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443 -j ACCEPT
# ping from inside to outside
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# allow loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Outbound DNS
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
# Logging before Drop for troubleshooting
iptables -A INPUT -j LOG
iptables -A INPUT -j LOG
Webサーバーがランダムなポートからの要求に応答した場合、OSはそのトラフィックをブラウザーに送信することをどのように認識しますか?
一般的には、次のように機能します。
accept
したいことをすでに伝えています。そこから、ブラウザとWebサーバーはそのTCPチャネルを介して互いにHTTPを話します。ただし、その詳細については説明しません。これはすべて、理由を説明するためだけのものです。サーバーからHTTP応答を取得できるようにする場合は、サーバーのポート80から発信されたインバウンドパケットをファイアウォールで許可する必要があります。
あなたが書く
..ポート80での着信トラフィックを許可するルールを削除すると、Googleやその他のものにアクセスできなくなり、ルールをアクティブにするとすべて機能します。 Webサーバーはこのポートでリッスンし、ランダムなポートから送信するべきではありませんか?
いいえ。www.google.comはポート80からランダムなポートに送信します。
同様に、実行するWebサーバーは、ポート80でリッスンするだけでなく、送信元ポートが80のパケットを送信します。
そしてもちろん、あなたのウェブサーバーはグーグルウェブサーバーと通信していません。
したがって、Webサーバーにアクセスする人は誰でも、ランダムなポートを開いてしまいます。
そして、あなたがグーグルにアクセスするとき、あなたはあなたの端を開くランダムなポートを持っています。
あなたの混乱は、INPUTが特に「着信接続」とは関係がないことに気付いていないことです。発信接続から着信するパケットを含む、着信するすべてのパケットです。
したがって、サーバーはポート80と443でリッスンします
私は専門家ではありませんが
「完璧なルールセットに向けて」で説明されているように(またはそれを指す人が使用するように)、共通のセットアップを提供します。
http://inai.de/documents/Perfect_Ruleset.pdf
-すべてを許可する
-すべての確立された関連するものを許可します(関連するものには、FTPが必要とする古いプロトコルなどの新しい接続が含まれます-FTPを使用しているわけではありません。ICMPエラーが含まれます)
-サーバーポートへのすべてのパケットを許可します。
だからあなたのポリシーは
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
-m conntrack
の使用は、--ctstate
および-m state
および--state
よりも新しいです。
そして、ポリシーに加えて、あなたのルールは
iptables -A INPUT -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 80,443 -j ACCEPT
また、あなたが使用し、フォームに合わせて上記で書いたスタイルはコマンドラインスタイルですが、iptablesスクリプトを使用する方がプロフェッショナルだと言う人もいるかもしれません。そして、行はiptables -Ainputではなく-Ainputを読み取ります。そして、iptables-save> fileとiptables-restore <file。
ポート80と443を処理する2つのルール、つまりHTTPが本当に必要です。トラフィックは常にポート80で伝送されますが、2つのルールが必要です...最初のルールでは、リモートページのリクエストを送信できます... 2番目のルールでは、そのリクエストの応答(目的のHTTPサーバーによって送信されます)が返されますお使いのブラウザに。
これらはルールです
iptables -A OUTPUT -o eth0 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m multiport --sports 80,443 -m state --state RELATED,ESTABLISHED -j ACCEPT
このルールを消去する必要があります
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 80,443 -j ACCEPT
また、必要なもの:
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
また、DNS応答のルールは、実際の応答に制限する必要があります。
iptables -A INPUT -p udp -i eth0 --sport 53 -m state --state ESTABLISHED -j ACCEPT