Linuxサーバーにファイアウォールを設定する必要があります(これまでの経験はすべてWindowsでした)。私のルールは非常に単純なものです-すべてを禁止し、すべてでいくつかのポートを許可し、特定のIPサブネットにいくつかのポートを許可しますが、ネットワークは小さいですが複雑です(各ホストは少なくとも2つの192.168 ...ネットにIPを持っています、誰でもできます多くの異なる方法で相互接続します)。 iptablesラッパーを使用すると、システムが論理的に複雑になり、多くの不要なエンティティが導入される可能性があるため、シンプルに保ち、iptablesを直接使用することをお勧めします。
Iptablesルールの書き方についての簡単な紹介をお勧めしますか?
公式および推奨へのリンク ドキュメント はNetfilterWebサイトにあります。
これは新しい主題ではありません。リソースは 無制限 です。
ほとんどの基本的なコマンドはかなり直感的で、 manpage を簡単に参照できます。
パケットフィルタリングを可能にするカーネルレベルのテクノロジーであるnetfilterは、非常に高度です。パケットをマングルしたり、パケットを変換したり、ルーティングに影響を与えたりする可能性のある追加のテーブルがあります。 iptables
ユーティリティは、netfilterと対話するためのユーザーランドツールです。高度な機能について知りたい場合は、前述のドキュメントを参照することをお勧めします。基本的な機能の概要については、さらにお読みください。
既存のすべてのルールを一覧表示するには:
iptables -L -n
-n
は、iptablesがipsを解決するのを防ぎ、より高速な出力を生成します。
デフォルトのテーブルはfilter
テーブルです。これは、3つのチェーンに基本的なファイアウォールルールを適用するために使用されます。 filter
テーブルの3つのデフォルトチェーンは、INPUT
、OUTPUT
、およびFORWARD
です。
チェーンは主に自明です。 INPUTチェーンは着信パケットに影響を与え、OUTPUTチェーンはローカルで生成されたパケットに影響を与え、最後にシステムを経由するすべてのパケットを転送します。
指定できるターゲットの中で、DROP
パケットを指定できます。これは、単に無視して応答しないことを意味します。 REJECT
パケットを送信できます。この場合、icmp応答が拒否の送信元に送信されます。最後に、それらをACCEPT
することができます。これにより、パケットはルーティングを続行できます。
多くの場合、外部に面したファイアウォールでは、デフォルトの選択はDROP
ではなくREJECT
になります。これは、インターネット上のネットワークの目に見えるフットプリントを削減するためです。たとえば、サービスを特定のホストに制限するIPは、DROP
の可視性が低くなります。
-A
は、チェーンの最後に追加することを意味することに注意してください。一番上に挿入したい場合は、-I
を使用できます。すべてのルールは上から下に処理されます。 -D
削除用。
DROP
へ192.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-save
とiptables-restore
。最新のLinuxディストリビューションのほとんどは、システムに付属のiptablesinitファイル内にsave
およびrestore
関数を持っています。
不正な形式のパケットやその他の種類の望ましくないトラフィックをドロップするなど、ファイアウォールのベストプラクティスは他にもあります。これは、 Shorewall などのフロントエンドユーティリティを使用する利点の1つです。これは、これらのポリシーの多くをデフォルトで実装するためです。それでも、私はあなたのアプローチに同意し、私自身のルールも直接維持することを好みます。これらの同じベストプラクティスは、フロントエンドなしで実装できます。
最近、 https://help.ubuntu.com/community/IptablesHowTo が役に立ちました。特にUbuntu固有のものはないと思います。