GNU/Linux >> Linux の 問題 >  >> Linux

Linux IPTables:ファイアウォール ルールを追加する方法 (Allow SSH の例を使用)

この記事では、「iptables -A」(追加) コマンドを使用して iptables ファイアウォール ルールを追加する方法について説明します。

「-A」は追加用です。 「-A」を add-rule (append-rule ではなく) として覚えやすくする場合は、それで問題ありません。ただし、「-A」はチェーンの最後にルールを追加することに注意してください。

繰り返しになりますが、-A は最後にルールを追加することを覚えておくことが非常に重要です。

通常、最後のルールはすべてのパケットを破棄することです。すべてのパケットをドロップするルールが既にあり、コマンドラインから「-A」を使用して新しいルールを作成しようとすると、現在の「すべてのパケットをドロップする」ルールの後に新しいルールを追加することになります。これにより、新しいルールがほとんど役に立たなくなります。

iptables をマスターしたら、本番環境に実装するときは、シェル スクリプトを使用する必要があります。シェル スクリプトでは、-A コマンドを使用してすべてのルールを追加します。そのシェル スクリプトでは、最後の行は常に「すべてのパケットを破棄する」ルールにする必要があります。新しいルールを追加する場合は、そのシェル スクリプトを変更し、「すべてのパケットをドロップする」ルールの上に新しいルールを追加します。

構文:

iptables -A chain firewall-rule
  • -チェーン – ルールを追加するチェーンを指定します。たとえば、着信パケットには INPUT チェーンを使用し、発信パケットには OUTPUT チェーンを使用します。
  • firewall-rule – ファイアウォール ルールを構成するさまざまなパラメータ

チェーンの意味がわからない場合は、最初に iptables の基礎を読んだほうがよいでしょう。

ファイアウォール ルールのパラメータ

次のパラメータは、あらゆる種類のファイアウォール ルールで使用できます。

-p はプロトコル用です

  • ルールのプロトコルを示します。
  • 有効な値は tcp、udp、icmp です
  • すべてのプロトコルを許可するには、「all」を使用します。 -p を指定しない場合、デフォルトで「すべての」プロトコルが使用されます。 「すべて」を使用して、常にプロトコルを指定することはお勧めできません。
  • プロトコルには名前 (例:tcp) または番号 (例:tcp の場合は 6) を使用します。
  • /etc/protocols ファイルには、許可されているすべてのプロトコル名と番号が含まれています。
  • -protocol も使用します

-s はソース用です

  • パケットのソースを示します。
  • これは、IP アドレス、ネットワーク アドレス、またはホスト名のいずれかです
  • 例:-s 192.168.1.101 は特定の IP アドレスを示します
  • ネットワーク マスクには /mask を使用します。たとえば、「-s 192.168.1.0/24」は、そのネットワークのネットワーク マスク 255.255.255.0 を表します。これは 192.168.1.x ネットワークに一致します。
  • ソースを指定しない場合、すべてのソースに一致します。
  • –src または –source も使用できます

-d は宛先です

  • パケットの宛先を示します。
  • これは「-s」と同じです (宛先ホスト、IP アドレス、またはネットワークを表すことを除いて)
  • –dst または –destination も使用できます

-j がターゲット

  • j は「ターゲットにジャンプ」の略
  • これは、このファイアウォール ルールに一致するパケットをどうする必要があるかを指定します。
  • 可能な値は ACCEPT、DROP、QUEUE、RETURN です
  • 他のユーザー定義チェーンをターゲット値として指定することもできます.

-i は in インターフェース用です

  • i は「入力インターフェース」の略
  • これを見過ごして、「-i」がインターフェース用であると思い込むかもしれません。 -i と -o の両方がインターフェイス用であることに注意してください。ただし、入力インターフェイスの場合は -i、出力インターフェイスの場合は -o です。
  • 受信パケットが INPUT、FORWARD、および PREROUTING チェーンを通過する際に通過するインターフェースを示します。
  • 例:-i eth0 は、このルールがインターフェイス eth0 を介して着信するパケットを考慮する必要があることを示します。
  • -i オプションを指定しない場合、システムで使用可能なすべてのインターフェースが入力パケットとして考慮されます。
  • –in-interface も使用できます

-o は out インターフェイス用です

  • o は「出力インターフェース」の略
  • INPUT、FORWARD、および PREROUTING チェーンを介して発信パケットが送信されるインターフェイスを示します。
  • -o オプションを指定しない場合、システムで使用可能なすべてのインターフェースが出力パケットとして考慮されます。
  • –out-interface も使用できます

ファイアウォール パラメータの追加オプション

上記のファイアウォール パラメータの一部には、一緒に渡すことができる独自のオプションがあります。以下は、最も一般的なオプションの一部です。

これらのパラメータ オプションを使用するには、ファイアウォール ルールで対応するパラメータを指定する必要があります。たとえば、「–sport」オプションを使用するには、ファイアウォール ルールで「-p tcp」(または「-p udp」) パラメーターを指定する必要があります。

注:これらのオプションにはすべて、前に 2 つのダッシュがあります。たとえば、sport の前に 2 つのハイフンがあります。

–sport は送信元ポート用です (-p tcp または -p udp 用)

  • デフォルトでは、すべての送信元ポートが一致します。
  • ポート番号または名前のいずれかを指定できます。たとえば、ファイアウォール ルールで SSH ポートを使用するには、「–sport 22」または「–sport ssh」を使用します。
  • /etc/services ファイルには、許可されているすべてのポート名と番号が含まれています。
  • ポート名を使用するよりも、ルールでポート番号を使用する方が (パフォーマンスの点で) 優れています。
  • ポートの範囲を一致させるには、コロンを使用します。たとえば、22:100 は 22 から 100 までのポート番号に一致します。
  • –source-port も使用できます

–dport は宛先ポート用です (-p tcp または -p udp の場合)

  • これが宛先ポート用であることを除いて、すべて -sport と同じです。
  • –destination-port も使用できます

–tcp-flags は TCP フラグ用です (-p tcp 用)

  • これには、カンマで区切られた複数の値を含めることができます。
  • 有効な値:SYN、ACK、FIN、RST、URG、PSH。 ALL または NONE も使用できます

–icmp-type は ICMP タイプ用です (-p icmp 用)

  • icmp プロトコル「-p icmp」を使用する場合、「–icmp-type」パラメーターを使用して ICMP タイプを指定することもできます。
  • 例:「エコー応答」には「–icmp-type 0」を使用し、「エコー」には「–icmp-type 8」を使用します。

着信 SSH 接続を許可するファイアウォール ルールの例

ファイアウォール ルールのさまざまなパラメーター (およびそのオプション) を理解したので、サンプルのファイアウォール ルールを作成しましょう。

この例では、サーバーへの着信 SSH 接続のみを許可します。他のすべての接続はブロックされます (ping を含む)。

警告:ファイアウォール ルールを操作すると、システムにアクセスできなくなる可能性があります。自分が何をしているのかわからないと、自分自身 (および他のすべての人) をシステムから締め出してしまう可能性があります。したがって、すべての学習は誰も使用していないテスト システムでのみ行ってください。ロックアウトされた場合は、コンソールにアクセスして iptables を再起動できます。

1.既存のルールを削除

すでにいくつかの iptables ルールがある場合は、既存のルールを削除する前にバックアップを取ってください。

既存のルールをすべて削除し、ファイアウォールがすべてを受け入れるようにします。前述のように iptables flush を使用して、既存のルールをすべてクリーンアップし、最初からやり直してください。

外部からこのサーバーに ssh および ping できることをテストして確認してください。

この例を完了すると、このサーバーにのみ SSH で接続できるようになります。外部からこのサーバーに ping を実行することはできません。

2. SSH のみを許可

このサーバーへの着信 SSH 接続のみを許可します。どこからでもこのサーバーに ssh できます。

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

上記の iptables コマンドには、次の 4 つのコンポーネントがあります。

  • 「-A INPUT」 – これは、新しいルールを INPUT チェーンに追加 (または追加) していることを示します。したがって、このルールは着信トラフィック用です。
  • 「-i eth0」 – インターフェイス eth0 を介した受信パケットは、このルールに対してチェックされます。
  • “-p tcp –dport 22” – このルールは TCP パケット用です。これには「–dport 22」という 1 つの tcp オプションがあり、サーバー上のこのルールの宛先ポートが 22 (ssh) であることを示します。
  • 「-j ACCEPT」 – パケットを受け入れるだけの受け入れにジャンプします。

上記のルールを簡単に言うと、ssh の eth0 を介したすべての着信パケットが受け入れられます。

3.他のすべてのパケットをドロップ

パケットを受け入れるカスタム ルールを指定したら、他のパケットをドロップするデフォルト ルールも設定する必要があります。

これは INPUT チェーンの最後のルールにする必要があります。

すべての着信パケットを破棄するには、次の手順を実行します。

iptables -A INPUT -j DROP

4. SSH ルールとテストを表示

現在の iptables ファイアウォール ルールを表示するには、「iptables -L」コマンドを使用します。

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

上記の出力からわかるように、次の 2 つのルールが順番に含まれています。

  • 着信 ssh 接続をすべて受け入れる
  • 他のすべてのパケットをドロップします。

コマンド ラインからファイアウォール ルールを追加する代わりに、以下に示すように、ルールを含むシェル スクリプトを作成することをお勧めします。

# vi iptables.sh
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

# sh -x iptables.sh
+ iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
+ iptables -A INPUT -j DROP

# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

iptables の append/add コマンドと同様に、iptables で使用できるコマンドは他にもいくつかあります。それらについては、iptables シリーズの今後の記事で取り上げます。また、実際のシナリオで役立ついくつかの実用的なファイアウォール ルールの例も提供します。

iptables シリーズの以前の記事:

  • Linux ファイアウォール チュートリアル:IPTables テーブル、チェーン、ルールの基礎
  • IPTables Flush:RedHat および CentOS Linux でのすべてのルールの削除/削除

Linux
  1. Linuxのグループにユーザーを追加する方法(例を含む)

  2. Linux IPTables ファイアウォールでドロップされたパケットをログ ファイルに記録する方法

  3. CentOS / RHEL :iptable ルールを追加する方法

  1. CSFファイアウォールにカスタムiptablesルールを追加する方法

  2. シバンを追加する方法 #! Linuxでphpスクリプトを使用しますか?

  3. iptables ルールを期限切れにする方法は?

  1. 方法:Linux General –一般的なIPTables

  2. Linux でスレッドを作成する方法 (C サンプル プログラムを使用)

  3. Linux で空のパスワードで ssh を許可する方法