iptablesの良い紹介をお勧めできますか?[閉まっている]


15

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

iptablesルールの作成方法についての簡単な紹介をお勧めできますか?

回答:


26

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

これは新しいテーマではなく、リソースは無限です。

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

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

既存のルールをすべてリストするには:

iptables -L -n

-n iptablesがipsを解決できなくなり、出力が高速になります。

デフォルトのテーブルはfilterテーブルです。これは、3つのチェーンに基本的なファイアウォールルールを適用するために使用されるものです。3つのデフォルトのチェーンfilterテーブルがありINPUTOUTPUTFORWARD

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

指定できるターゲットの中で、DROPパケットを送信できます。つまり、単に無視して応答しません。することができますREJECTICMP応答が否定のソースに送信されるパケット。最後に、ACCEPTそれらを使用して、パケットのルーティングを続行できます。

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

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

からDROPの着信パケットへ192.168.235.235

iptables -A INPUT -s 192.168.235.235 -j DROP

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

受け入れるために:

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フラグで指定されたデフォルトポリシーがあります。ポリシーをdefault DROPに設定している場合でも、チェーン内の最終エントリも同様にすることをお勧めしDROPます。

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

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

最初に自分でSSHアクセスを許可せずに、リモートシステムでINPUTに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ディストリビューションは持っているsaverestoreiptablesの内の関数は、システムに付属のファイルを初期化。

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


2
ここでランダムなiptablesのものを探しているときにこの答えに出会いました(私はもうGoogleの前にSF / SOを検索します!)、この非常に詳細な答えはより多くの投票の愛に値するようですので、私はそれをいくつか与えました!
アンドリューバーバー

+1いい答え。Debian WIKIも言及します。
michal.kreuzman


1

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


私はラップトップでArchを使用していますが、Ubuntu Lucid Serverはまさに設定するタスクです。だから、これは時代遅れでなければ手に入れることができます(私が見る限り、Ubuntu 8.04に対処しています)。
イヴァン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.