web-dev-qa-db-ja.com

SSHのみを許可するWebサイトをロックダウンするIPtables

SSHとWebに必要なポートを除くすべてのポートでサーバーを保護するために、最初のIPtablesルールファイルを作成しました。

これは私が思いついたものです:

i=/sbin/iptables

# Flush all rules
$i -F
$i -X

# Setup default filter policy
$i -P INPUT DROP
$i -P OUTPUT DROP
$i -P FORWARD DROP

# Allow unlimited traffic on loopback
$i -A INPUT -i lo -j ACCEPT
$i -A OUTPUT -o lo -j ACCEPT

# Open up ports for nginx
$i -A INPUT -p tcp --dport 443 -j ACCEPT
$i -A INPUT -p tcp --dport 80 -j ACCEPT
$i -A INPUT -p tcp --dport 22 -j ACCEPT

# Make sure nothing comes or goes out of this box
$i -A INPUT -j DROP
$i -A OUTPUT -j DROP

IPテーブルに関してはややブラックアートがあることを知っているので、誰かが参加して、これがWebサーバーを保護するための正しいアプローチであるかどうかを確認できるかどうか疑問に思いました。

4
Jimmy

おそらく、すべての発信接続をドロップしたくないでしょう。

ESTABLISHED接続を許可するために、早い段階でルールを追加することをお勧めします。ftpなどのプロトコルを使用している場合は、ルールにRELATEDを追加することもできます。

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

ルールの順序が重要であることを忘れないでください-最初の試合が勝ちます。

Webサーバーのセキュリティ保護に関するこのQ&Aをご覧ください LAMPサーバーを保護するためのヒント すばらしい情報がたくさんあります。

6
user9517

あなたは行方不明です-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTどこか。さらに、すべての発信パケットをドロップするわけではありません。

1
kasperd

INPUTチェーン

新しいセッションの作成を許可します。 @Lainの回答には小さな問題があり、ステートフルインスペクションを実行しません。これは、次の手順で実行できます。

-A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT

確立されたセッションを許可する

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

OUTPUTチェーン

オプション1

すべてのアウトバウンドトラフィックを許可する

-P OUTPUT ACCEPT

オプション#2

受け入れられた入力への応答であるアウトバウンドトラフィックのみを許可します。これは、アウトバウンドトラフィックを強制する場合に役立ちます。

-P OUTPUT DROP
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

そして、受け入れられたアウトバウンドトラフィックのルール例

-A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

。 。 。

最後に、「-m state --state ESTABLISHED、RELATED」を含むルールは、しばしば照合されるため、ルールセットの上部近くに置いてください。セッションを開始するルールは、prセッションで1回だけ使用されます。

0