web-dev-qa-db-ja.com

iptablesの良い紹介をお勧めできますか?

Linuxサーバーにファイアウォールを設定する必要があります(これまでの経験はすべてWindowsでした)。私のルールは非常に単純なものです-すべてを禁止し、すべてでいくつかのポートを許可し、特定のIPサブネットにいくつかのポートを許可しますが、ネットワークは小さいですが複雑です(各ホストは少なくとも2つの192.168 ...ネットにIPを持っています、誰でもできます多くの異なる方法で相互接続します)。 iptablesラッパーを使用すると、システムが論理的に複雑になり、多くの不要なエンティティが導入される可能性があるため、シンプルに保ち、iptablesを直接使用することをお勧めします。

Iptablesルールの書き方についての簡単な紹介をお勧めしますか?

15
Ivan

公式および推奨へのリンク ドキュメント はNetfilterWebサイトにあります。

これは新しい主題ではありません。リソースは 無制限 です。

ほとんどの基本的なコマンドはかなり直感的で、 manpage を簡単に参照できます。

パケットフィルタリングを可能にするカーネルレベルのテクノロジーであるnetfilterは、非常に高度です。パケットをマングルしたり、パケットを変換したり、ルーティングに影響を与えたりする可能性のある追加のテーブルがあります。 iptablesユーティリティは、netfilterと対話するためのユーザーランドツールです。高度な機能について知りたい場合は、前述のドキュメントを参照することをお勧めします。基本的な機能の概要については、さらにお読みください。

既存のすべてのルールを一覧表示するには:

iptables -L -n

-nは、iptablesがipsを解決するのを防ぎ、より高速な出力を生成します。

デフォルトのテーブルはfilterテーブルです。これは、3つのチェーンに基本的なファイアウォールルールを適用するために使用されます。 filterテーブルの3つのデフォルトチェーンは、INPUTOUTPUT、およびFORWARDです。

チェーンは主に自明です。 INPUTチェーンは着信パケットに影響を与え、OUTPUTチェーンはローカルで生成されたパケットに影響を与え、最後にシステムを経由するすべてのパケットを転送します。

指定できるターゲットの中で、DROPパケットを指定できます。これは、単に無視して応答しないことを意味します。 REJECTパケットを送信できます。この場合、icmp応答が拒否の送信元に送信されます。最後に、それらをACCEPTすることができます。これにより、パケットはルーティングを続行できます。

多くの場合、外部に面したファイアウォールでは、デフォルトの選択はDROPではなくREJECTになります。これは、インターネット上のネットワークの目に見えるフットプリントを削減するためです。たとえば、サービスを特定のホストに制限するIPは、DROPの可視性が低くなります。

-Aは、チェーンの最後に追加することを意味することに注意してください。一番上に挿入したい場合は、-Iを使用できます。すべてのルールは上から下に処理されます。 -D削除用。

DROP192.168.235.235からの着信パケット:

iptables -A INPUT -s 192.168.235.235 -j DROP

これは、そのIPからのすべてのプロトコルのDROPターゲットにジャンプします。

受け入れるために:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

ローカルサーバーまたはネットワークからそのIPにアクセスできないようにするには:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

-pプロトコル、パケットの-s送信元、パケットの-d宛先、宛先ポート--dport、送信元ポート--sportを指定できます。 、およびパケットがルールによってどのように扱われるかに影響を与える他の多くのフラグ。

デフォルトのINPUTポリシーがDROPであり、192.168.123.0/24サブネットの全員がサーバー上のSSHにアクセスできるようにする場合は、次の例を参照してください。

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

そうです、 CIDR表記 も​​使用できます!

一般的に、最適なデフォルトポリシーは、すべてのチェーンに対してDROPです。すべてのチェーンにはデフォルトのポリシーがあり、これは-Pフラグで指定されます。ポリシーをデフォルトのDROPに設定している場合でも、チェーンの最後のエントリをDROPにすることをお勧めします。

たとえば、INPUT、FORWARD、およびOUTPUTチェーンのポリシーをDROPに変更するには次のようにします。

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

注意、最初にSSHアクセスを許可せずに、リモートシステムで入力のDROPのデフォルトポリシーを指定すると、システムへのアクセスを妨げる可能性があります。リモートシステムの場合は、一時的なcrontabを指定して、5分ごとにすべてのルールをフェイルセーフとしてフラッシュできます。

すべてのルールを削除してすべてのトラフィックを許可するには:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

-Xは、作成されたすべてのチェーンを削除することに注意してください。 -Fはすべてのルールをフラッシュします。

ルールを保存および復元するためのネイティブツールがあります。特に、iptables-saveiptables-restore。最新のLinuxディストリビューションのほとんどは、システムに付属のiptablesinitファイル内にsaveおよびrestore関数を持っています。

不正な形式のパケットやその他の種類の望ましくないトラフィックをドロップするなど、ファイアウォールのベストプラクティスは他にもあります。これは、 Shorewall などのフロントエンドユーティリティを使用する利点の1つです。これは、これらのポリシーの多くをデフォルトで実装するためです。それでも、私はあなたのアプローチに同意し、私自身のルールも直接維持することを好みます。これらの同じベストプラクティスは、フロントエンドなしで実装できます。

26
Warner
2
halp

最近、 https://help.ubuntu.com/community/IptablesHowTo が役に立ちました。特にUbuntu固有のものはないと思います。

1
gbroiles