テクノロジー LINUX 非公開: 25 以上の最も一般的な iptables コマンドと例

25 以上の最も一般的な iptables コマンドと例

Linux を使用している場合、デバイスを保護するためのオプションがたくさんあります。柔軟性と優れた保護を提供するコマンドライン ファイアウォール ユーティリティである iptables が付属しています。

ただし、コマンドライン ユーティリティであるため、多少の学習が必要です。

したがって、システム管理者または Linux の学習者であれば、一般的な iptables コマンドを例を挙げて説明するのに最適です。

コンテンツ 表示

iptablesとは何ですか?

iptables は、ソフトウェアベースの Linux 組み込みファイアウォールです。 Linux ユーザーは、インターネット トラフィックに直接的および間接的に影響を与えるポリシーを作成または定義できます。

つまり、iptables を使用して、ポート、送信元 IP アドレス、ネットワーク インターフェイスなどを介したトラフィックをブロックまたは許可するルールを作成できます。

ルールを定義したら、すべてのトラフィックがそのルールを通過する必要があります。したがって、たとえば、新しい接続ごとに、iptables はその接続に一致する事前定義されたルールがないかチェックします。存在する場合、ルールが接続に適用されます。ただし、関連付けられた適用可能なルールがない場合は、デフォルトのルールが実装されます。

iptables を使用するには、次のコマンドを使用する必要があります。

 $ iptables -L -n -v 

ここでのパラメータは以下の通りです。

  • -L はすべてのルールをリストします。
  • -n を指定すると、数値出力のパフォーマンスが向上します。
  • -v は出力を詳細な形式で表示します。

パラメータを指定せずに iptables コマンド を実行すると、次の出力が返されます。

 iptables v1.8.7 (nf_tables): no command specified

Try `iptables -h' or 'iptables --help' for more information.

コマンド「iptables」が見つからないなどのエラーが発生した場合は、インストールする必要があります。

Linux ディストリビューションに iptables をインストールするには、次のコマンドを実行します。

 $ sudo apt-get install iptables

私の Linux ディストリビューションにはすでにプレインストールされているため、次のものが返されます。

 #output
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
iptables is already the newest version (1.8.7-1ubuntu5).
iptables set to manually installed.
0 upgraded, 0 newly installed, 0 to remove, and 35 not upgraded.

ファイアウォールとは何ですか?

ファイアウォールは、システム、ネットワーク、およびパーソナル コンピュータを保護する最も基本的な形式です。ハードウェアベースでもソフトウェアベースでもよく、適切に機能するルールに依存します。

ほとんどのファイアウォールは高度にカスタマイズ可能であり、ルールを作成または編集できます。たとえば、インターネットからのパケットはポートを使用してシステムに侵入するため、ポートベースのスキャンはパケットをフィルタリングして除去するのに役立ちます。それとは別に、送信元 IP アドレスまたはネットワーク インターフェイスによってサービスを許可またはブロックすることもできます。

Linux を使用している場合は、組み込みの iptables にアクセスできます。ただし、システムを保護するプロセスを支援するために、スタンドアロンの Linux ファイアウォールを使用することもできます。

ファイアウォールの設定に iptables が必要なのはなぜですか?

しかし、そもそもなぜ iptables を使用する必要があるのでしょうか?結局のところ、 ufw firewalld など、代替の優れたコマンドライン ファイアウォール ユーティリティがあります。また、使いやすく、より多くの機能を提供するスタンドアロン Linux ファイアウォールを使用することもできます。

では、ファイアウォールを構成する際に iptables が非常に魅力的なのはなぜでしょうか?これを使用する理由は次のとおりです。

  • すぐに使える優れた柔軟性を提供します。パケットレベルでルールを設定できます。
  • 仕組みが分かれば比較的簡単に使用できます。
  • 不要なトラフィックを簡単な方法でブロックします。
  • パケットを代替 IP アドレスにリダイレクトします。
  • サービス拒否 (DoS) 攻撃からシステムを保護します。

さらにもっと!

iptables アーキテクチャと Netfilter との関係を理解する

iptables を正しく理解するには、そのアーキテクチャについて学ぶ必要があります。まず、さまざまな iptables コンポーネントを明確に理解できるようになります。次に、それぞれについて理解したら、それらを使用してファイアウォール ルールを作成できます。

そして、iptables について話すとき、Netfilter も登場します。 「Netfilter」は iptables の兄貴分のようなものと考えることができます。これは iptables の上に構築されており、ファイアウォールを管理するためのより優れた機能セットを提供します。ただし、優れたファイアウォール機能を実現する手段の 1 つとして iptables を使用します。

iptables は、Netfilter カーネルレベルのフックへのコマンドライン インターフェイスです。これらのフックは Linux ネットワーク スタックと対話することができ、最も深いレベルでパケットに影響を与えます。

では、iptables アーキテクチャは次のようになります。

IPtables のパケットフロー
IPtables のパケットフロー

テーブル

iptables アーキテクチャはテーブルから始まります。これらのテーブルはルールの編成を担当します。そして、各テーブルは、下している意思決定の種類に基づいて分類されています。より簡単に言うと、テーブルはパッケージを処理するための特定の方法を付加することにより、パッケージ全体の処理を簡素化します。

iptables によって提供されるさまざまなテーブルには次のものがあります。

  • フィルタ テーブル: パケット フィルタリングの決定タイプを指定します。簡単に言えば、荷物が目的地に到着するかどうかを決定します。
  • NAT テーブル: アドレス変換の決定タイプを指定します。ここで、パケットのルーティングは NAT ネットワークに基づいて決定されます。たとえば、パッケージが NAT にアクセスできない場合、パッケージはスキップされて、非 NAT ネットワークの検索を試みます。
  • Mangle テーブル: パッケージの特別な処理ニーズを管理します。たとえば、TTL 値などのパケットのヘッダー情報を変更するように設定できます。
  • Raw テーブル: Raw テーブルを使用すると、iptables ファイアウォールのステートフルな側面を熱心に操作できます。このテーブルを使用すると、Linux カーネルが状態の追跡を開始する前に、パケットの「状態」に基づいてパケットをルーティングできます。これは主に、接続追跡システムがパケットを処理するかどうかに関係なく、パケットをマークするために使用されます。パケットが追跡されない場合、パケットは NOTRACK ターゲットに設定されます。
IPtables テーブル
IPtables テーブル

チェーン

そして、「テーブル」の中に「チェーン」があります。

これらのチェーンは、経路のさまざまな段階で詳細なパケット検査を処理します。たとえば、ポートまたはネットワーク インターフェイスに到達したときにそれらを検査できます。このようにして、パッケージがシステムのプロセスにリリースされる前に決定を下すことができます。

テーブルと同様に、さまざまなチェーンも入手できます。これらには次のものが含まれます。

  • PREROUTING チェーン: ここでは、ルールはネットワーク インターフェイスで到着したばかりのパケットを処理します。
  • INPUT チェーン: INPUT チェーンで説明されているルールは、受信接続の動作を処理します。完了すると、ローカル プロセスに渡されます。
  • OUTPUT チェーン: OUTPUT チェーンは、プロセスが生成するパケットを処理します。
  • FORWARD チェーン: FORWARD チェーンは、ローカル システム向けではないパケットを管理します。これは、ルーターなどの他の宛先システムのキャリアです。
  • POSTROUTING チェーン: 最後に、ネットワーク インターフェイスを通って出ようとしているパケットを処理する POSTROUTING チェーンがあります。
Iptables チェーン
Iptables チェーン

各テーブルですべてのチェーンが利用できるわけではありません。たとえば、FORWARD チェーンはマングル、フィルター、セキュリティ テーブルでのみ使用できます。同様に、POSTROUTING チェーンは、mangle および nat (SNAT) で使用できます。すべてのテーブルで OUTPUT チェーンのみが使用可能です。

目標

さて、私たちには「目標」があります。パッケージが到着すると、チェーンを移動して、どのルールの説明が最も適合するかを確認します。ルールの説明に適合する場合、それに基づいて関連付けられたアクションを実行し、ターゲットに移動して、パケットの運命を決定します。

多くの場合、パケットはどの説明やルールセットにも適合しません。そこで、デフォルトのポリシーであるターゲットが登場します。

ターゲットには、ACCEPT、DROP、および REJECT を指定できます。これらはパケットの運命を決定する終端ターゲットです。

  • ACCEPT: パケットを受け入れます。
  • DROP: パケットをドロップし、送信者がシステムが存在するかどうかを認識できないようにします。
  • REJECT: パケットを拒否します。

主にパケットに関する情報を保存するために使用される非終端ターゲットもあります。

最も一般的な iptables コマンドと例

iptables コマンドの実行を開始する前に、次のことを確認してください。

  • コマンドを実行するための管理アクセス権を持っています。管理者権限が原因でコマンドが失敗した場合は、先頭に sudo コマンドを付けてコマンドを再実行します。
  • この記事は 、Ubuntu で iptables を構成する方法に関するチュートリアルではありません
  • IPv4 で動作する iptables コマンドを使用します。 IPv6 を使用する場合は、代わりに ip6tables を 使用する必要があります。
25 以上の最も一般的な iptables コマンドと例
25 以上の最も一般的な iptables コマンドと例

iptablesのステータスを確認する

現在の iptables のステータスを確認するには、次のコマンドを実行する必要があります。

 $ iptables -L -n -v
 #output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

上記の出力には多くの情報が含まれています。ただし、これはファイアウォールが非アクティブであることを示唆するものでもあります。これは、現在、すべてのチェーンが ACCEPT に設定されており、ルールがないためです。

ファイアウォールをアクティブ化するには、ルールの追加を開始する必要があります。

チェーンへのルールの追加

ルールを追加すると、ルールは常にチェーンに追加されます。したがって、 -A (追加) オプション を使用する必要があります。その構文は次のとおりです。

 $ sudo iptables - A

ただし、実行すると次のものが返されます。

 iptables v1.8.7 (nf_tables): option "-A" requires an argument

Try `iptables -h' or 'iptables --help' for more information.

ルールを追加するために使用できる引数は次のとおりです。

  • – i: インターフェースを表します。ここで、ルールを追加するインターフェイスについて言及できます。 ppp0、eth0 などを指定できます。
  • – p: プロトコルの略です。ここでは、ネットワーク プロトコルを使用してパッカーをフィルタリングするルールについて言及しています。たとえば、ICMP、TCP、UDP などと指定できます。ルールをすべてのプロトコルで機能させる場合は、引数値として「all」を指定します。
  • – s: 次に、トラフィックの送信元 (IP アドレスまたはホスト名) を指定するsource 引数が続きます。
  • – dport: dport は宛先ポートを表し、パケットの宛先となるポート番号を指定します。
  • – j: 最後に、TARGET 引数があり、TARGET 名、ACCEPT、DROP、または RETURN を指定できます。

コマンドを次の順序で記述することも重要です。

 $ sudo iptables -A <chain-name> -i <interface-name> - p <protocool-name> - s <source> --dport <port no.> -j <target>

iptables への変更の保存

ルールを追加したら、 iptables -save コマンドを使用してルールを保存できます。

 $ sudo iptables -save

出力は次のとおりです。

 nitt@logan99:~$ sudo iptables-save

# Generated by iptables-save v1.8.7 on Sun May 14 13:37:34 2023

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

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

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 392 -j REJECT --reject-with icmp-port-unreachable

-A OUTPUT -o lo -j ACCEPT

COMMIT

# Completed on Sun May 14 13:37:34 2023

ルールを手動で永続化する

デフォルトでは、iptables はルールを保存しません。したがって、コンピュータを再起動すると、すべてのルールが削除されます。 iptables を再構成する必要がないようにするには、次のコマンドを使用する必要があります。

IPv4 ルールの場合は、次のコマンドを作成します。

 $ sudo iptables-save > /etc/iptables/rules.v4

IPv6 ルールの場合は、次のコマンドを記述します。

 $ sudo iptables-save > /etc/iptables/rules.v6

ルールを自動的に永続化する

再起動後もルールを持続させ、それを自動的に行うには、 iptables-presistent パッケージをインストールする必要があります。

これを行うには、次のコマンドを実行します。

 $ sudo apt-get install iptables-persistent

次のウィンドウが開きます。 <はい>でEnterを押します。

iptables-永続的
iptables-永続的

IPv4 テーブルを操作しているため、IPv4 ルールのみが表示されます。 IPv6 で作業している場合は、関連するウィンドウが表示されます。

注: パッケージは、保存された iptables ルールのみをロードします。したがって、iptables を変更するたびに、次のように保存する必要があります。 iptables -save コマンド。

再起動後のルールのリロード

ルールを保存したら、次のコマンドを使用してルールを復元する必要があります。

 $ sudo iptables-restore < /etc/iptables/rules.v4

そして

$ sudo iptables-restore < /etc/iptables/rules.v6

ローカルホストでのトラフィックの有効化 / ループバックの有効化

Localhost でトラフィックを有効にするには、次のコマンドを使用します。

 $ sudo iptables -A INPUT -i lo -j ACCEPT

ここで、 lo は すべてのローカルホスト通信のループバック インターフェイスを表します。

同様に、パケットがループバック インターフェイスを経由して送信されるようにすることもできます。

 $ sudo iptables -A OUTPUT -o lo -j ACCEPT

ルールがどのように変更されたかを確認するには、 iptables -L -n -V を実行します。

 #output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

特定のポートでのトラフィックの有効化

特定のポートでのトラフィックの ACCEPT または REJECT を有効にすることができます。

たとえば、SSL、HTTP、SSH ポートは、アプリが正常に機能するために重要です。ポート番号を介して ACCEPT パケットにルールを追加して、ルールが意図したとおりに動作することを確認できます。

SSL の場合は、次のコマンドを実行します。

 $ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

HTTPS の場合は、次のコマンドを実行します。

 $ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

eth0 インターフェイスですべての HTTPS トラフィックを許可します。

 $ iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

SSH の場合は、次のコマンドを実行します。

 $ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

また、eth0 インターフェイスですべての受信 SSH トラフィックを受け入れるには、次のコマンドを実行します。

 $ iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

別の例としては、カスタム アプリの特定のポートでポート トラフィックを有効にすることが挙げられます。ポート 233 としましょう。

そのポートで接続を開くには、実行します。

 $ sudo iptables -A INPUT -p tcp --dport 233 -j ACCEPT

同様に、REJECT ターゲット オプションを使用して、特定のポートでの接続を無効にすることもできます。

ポート 392 でのすべての接続をブロックしましょう。

 $ sudo iptables -A INPUT -p tcp --dport 392 -j REJECT

確認するには、 iptables -L -n -v コマンドを実行します。

 #output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:233

    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

 0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

既存のルールの削除

既存のルールを削除するには、次のコマンドを実行する必要があります。

 $ iptables -F

または

$ iptables --flush

注: ルールを保存していない場合、ルールは永久に失われ、 iptables -restore を 使用して復元することはできません。

行番号を含むルールの削除

特定のルールを削除するには、番号付きのルールのリストを取得する必要があります。

 $ sudo iptables -L --line-numbers
 #output

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

3    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https

4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:233

5    REJECT     tcp  --  anywhere             anywhere             tcp dpt:392 reject-with icmp-port-unreachable

INPUT チェーンのルール番号 4 を削除する場合は、次のコマンドを実行します。

 $ sudo iptables -D INPUT 4

そして、再度 iptables -n -v -L コマンドを実行するとします。

 #output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

INPUT または OUTPUT チェーン ルールのみを表示

INPUT チェーン ルールのみを表示するには、次のコマンドを実行します。

 $ sudo iptables -L INPUT -n -v --line-numbers
 #ouput

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

num   pkts bytes target     prot opt in     out     source               destination

1        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

2        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

3        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

4        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

同様に、OUTPUT チェーン ルールのみを表示したい場合は、次を実行します。

 $ sudo iptables -L OUTPUT -n -v --line-numbers
 #output

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

num   pkts bytes target     prot opt in     out     source               destination

1        0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

ファイアウォールの開始/停止/再起動

RHEL/Fedora Linux または CentOS を使用している場合は、コマンドを実行してファイアウォールを開始/停止または再起動できます。

 $ service iptables stop

$ service iptables start

$ service iptables restart

systemctl コマンドを使用することもできます。

ただし、Ubuntu では動作しません。

特定の場所にルールを挿入する

特定の位置にルールを挿入する場合は、次のコマンドを使用する必要があります。

まずはルールを確認しましょう。

 $ sudo iptables -L INPUT -n --line-numbers
 #output

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443

4    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

2 と 3 の間にルールを挿入する場合は、次のコマンドを実行します。

 $ sudo iptables -I INPUT 3 -s 252.32.1.2 -j DROP

次に、更新されたルールを確認します。

 #output

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

3    DROP       all  --  252.32.1.2           0.0.0.0/0

4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443

5    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

受信トラフィックはブロックしますが、送信トラフィックは許可します

すべての受信トラフィックをブロックするには、次のコマンドを入力する必要があります。

 $ iptables -P INPUT DROP

$ iptables -P FORWARD DROP

$ iptables -P OUTPUT ACCEPT

$ iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -L -v -n

このようにして、パッケージを ping したりダウンロードしたりしながら、不明な受信トラフィックをブロックできます。

特定のIPアドレスをブロックする

特定の IP アドレスをブロックするには、次のコマンドを実行します。

 $ iptables -A INPUT -s 14.23.59.9 -J DROP

ブロックされた IP アドレスを保存する変数を定義して、コマンドを実行することもできます。

 BLOCK_THE_IP = “a.b.c.d”

そして、次を実行します。

 $ iptables -A INPUT -s “BLOCK_THE_IP” -j DROP

注: 「abcd」を希望の IP アドレスに変更します。

外部からのシステム ping の許可

外部ユーザーにサーバーに ping を送信して、ネットワークを検出できるようにすることができます。

 $ sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

$ sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

内部ネットワークが外部ネットワークと通信できるようにする

次のコマンドを実行して、内部ネットワーク (eth0 としましょう) から外部ネットワーク (eth1 としましょう) へのアクセスを許可します。

 $ sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

アウトバウンドDNSを許可する

サーバーへの DNS 接続を許可するには、次のコマンドを実行します。

 $ iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT

$ iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

特定のネットワークからの Rsycn を許可する

Rsync コマンドを使用し、特定のネットワーク上でそれを有効にしたい場合は、次のコマンドを実行します。

 iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

ブロックポート

次のコマンドを実行して、特定のポートと受信リクエストをブロックします。

 iptables -A INPUT -p tcp --dport 80 -j DROP

iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

特定の IP アドレスへの送信トラフィックをブロックする

次のコマンドを実行すると、任意の IP アドレスへのトラフィックをブロックできます。

 $ host -t a .com

#出力

.com のアドレスは 172.66.40.93 です。

特定の IP アドレスへの送信トラフィックをブロックするには、次のコマンドを実行します。

 iptables -A OUTPUT -d 72.66.40.93 -j DROP

ソーシャルメディアプラットフォームをブロックする

同様に、Instagram、Twitter、Facebook などのソーシャル メディア プラットフォームをブロックすることもできます。

次のコマンドを実行して、ソーシャル メディアの IP アドレスを見つけます。

 $ host -t a social-media-web-adrress.com

たとえば、Instagram の場合は次のようになります。

 $ host -t a www.instagram.com

次に、特定のソーシャル メディア プラットフォームの IP アドレスの CIDR を見つける必要があります。

 $ whois 185.89.219.11 | grep CIDR

注: sudo apt-get install whois を実行して Whois パッケージをインストールする必要がある場合があります。

ここで、次の方法で CIDR 値を入力します。

 $ iptables - A OUTPUT -p tcp -d CIDR-value -j DROP

注: 必ず CIDR 値を適宜変更してください。

ICMP Ping リクエストを許可またはブロックする

ICMP ping リクエストを許可またはブロックするには、次のコマンドを実行します。

 $ iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

$ iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP

特定の範囲のポートを開く

一定範囲のポートを開くには、次のコマンドを実行します。

 $ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8933: 8500 -j ACCEPT

NAT ルールのリストを表示する

NAT ルールを一覧表示するには、次のコマンドを実行します。

 $ sudo iptables -t nat -L -n -v

または

$ sudo iptables -t nat -v -L -n --line-number

パッケージカウンターをリセットする

現在の iptables カウンタを確認するには:

 $ sudo iptables -L -n -v

カウンタをリセットまたはクリアするには、次のコマンドを実行します。

 $ sudo iptables -Z

$ sudo iptables -L -n -v

INPUT チェーン カウンターのみをリセットするには、次のコマンドを実行します。

 $ iptables -Z INPUT

特定のルール カウンタをリセットするには、次のコマンドを実行します。

 $ iptables -z INPUT RULE-NUMBER

RULE-NUMBER をその特定のルールに変更してください。

最後の言葉

iptables は、強力なファイアウォール コマンドライン ユーティリティです。ネットワーク リソース、パケット、インターフェイス、および特定のシナリオに関連するほとんどすべてを構成できます。

また、iptables には多くのオプションが用意されています。 man コマンドを使用してメイン ページを確認し、全体像を把握してください。

 $ man iptables
$ man ip6tables

次に、ネットワーク ファイアウォールと、それが攻撃の阻止にどのように役立つかを確認してください。

「 25 以上の最も一般的な iptables コマンドと例」についてわかりやすく解説!絶対に観るべきベスト2動画

システムの保守と運用管理/リソース監視(Linux学習)
現場で役立つヤマハルーターコマンド集

Linux を使用している場合、デバイスを保護するためのオプションがたくさんあります。柔軟性と優れた保護を提供するコマンドライン ファイアウォール ユーティリティである iptables が付属しています。

ただし、コマンドライン ユーティリティであるため、多少の学習が必要です。

したがって、システム管理者または Linux の学習者であれば、一般的な iptables コマンドを例を挙げて説明するのに最適です。

コンテンツ 表示

iptablesとは何ですか?

iptables は、ソフトウェアベースの Linux 組み込みファイアウォールです。 Linux ユーザーは、インターネット トラフィックに直接的および間接的に影響を与えるポリシーを作成または定義できます。

つまり、iptables を使用して、ポート、送信元 IP アドレス、ネットワーク インターフェイスなどを介したトラフィックをブロックまたは許可するルールを作成できます。

ルールを定義したら、すべてのトラフィックがそのルールを通過する必要があります。したがって、たとえば、新しい接続ごとに、iptables はその接続に一致する事前定義されたルールがないかチェックします。存在する場合、ルールが接続に適用されます。ただし、関連付けられた適用可能なルールがない場合は、デフォルトのルールが実装されます。

iptables を使用するには、次のコマンドを使用する必要があります。

 $ iptables -L -n -v 

ここでのパラメータは以下の通りです。

  • -L はすべてのルールをリストします。
  • -n を指定すると、数値出力のパフォーマンスが向上します。
  • -v は出力を詳細な形式で表示します。

パラメータを指定せずに iptables コマンド を実行すると、次の出力が返されます。

 iptables v1.8.7 (nf_tables): no command specified

Try `iptables -h' or 'iptables --help' for more information.

コマンド「iptables」が見つからないなどのエラーが発生した場合は、インストールする必要があります。

Linux ディストリビューションに iptables をインストールするには、次のコマンドを実行します。

 $ sudo apt-get install iptables

私の Linux ディストリビューションにはすでにプレインストールされているため、次のものが返されます。

 #output
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
iptables is already the newest version (1.8.7-1ubuntu5).
iptables set to manually installed.
0 upgraded, 0 newly installed, 0 to remove, and 35 not upgraded.

ファイアウォールとは何ですか?

ファイアウォールは、システム、ネットワーク、およびパーソナル コンピュータを保護する最も基本的な形式です。ハードウェアベースでもソフトウェアベースでもよく、適切に機能するルールに依存します。

ほとんどのファイアウォールは高度にカスタマイズ可能であり、ルールを作成または編集できます。たとえば、インターネットからのパケットはポートを使用してシステムに侵入するため、ポートベースのスキャンはパケットをフィルタリングして除去するのに役立ちます。それとは別に、送信元 IP アドレスまたはネットワーク インターフェイスによってサービスを許可またはブロックすることもできます。

Linux を使用している場合は、組み込みの iptables にアクセスできます。ただし、システムを保護するプロセスを支援するために、スタンドアロンの Linux ファイアウォールを使用することもできます。

ファイアウォールの設定に iptables が必要なのはなぜですか?

しかし、そもそもなぜ iptables を使用する必要があるのでしょうか?結局のところ、 ufw firewalld など、代替の優れたコマンドライン ファイアウォール ユーティリティがあります。また、使いやすく、より多くの機能を提供するスタンドアロン Linux ファイアウォールを使用することもできます。

では、ファイアウォールを構成する際に iptables が非常に魅力的なのはなぜでしょうか?これを使用する理由は次のとおりです。

  • すぐに使える優れた柔軟性を提供します。パケットレベルでルールを設定できます。
  • 仕組みが分かれば比較的簡単に使用できます。
  • 不要なトラフィックを簡単な方法でブロックします。
  • パケットを代替 IP アドレスにリダイレクトします。
  • サービス拒否 (DoS) 攻撃からシステムを保護します。

さらにもっと!

iptables アーキテクチャと Netfilter との関係を理解する

iptables を正しく理解するには、そのアーキテクチャについて学ぶ必要があります。まず、さまざまな iptables コンポーネントを明確に理解できるようになります。次に、それぞれについて理解したら、それらを使用してファイアウォール ルールを作成できます。

そして、iptables について話すとき、Netfilter も登場します。 「Netfilter」は iptables の兄貴分のようなものと考えることができます。これは iptables の上に構築されており、ファイアウォールを管理するためのより優れた機能セットを提供します。ただし、優れたファイアウォール機能を実現する手段の 1 つとして iptables を使用します。

iptables は、Netfilter カーネルレベルのフックへのコマンドライン インターフェイスです。これらのフックは Linux ネットワーク スタックと対話することができ、最も深いレベルでパケットに影響を与えます。

では、iptables アーキテクチャは次のようになります。

IPtables のパケットフロー
IPtables のパケットフロー

テーブル

iptables アーキテクチャはテーブルから始まります。これらのテーブルはルールの編成を担当します。そして、各テーブルは、下している意思決定の種類に基づいて分類されています。より簡単に言うと、テーブルはパッケージを処理するための特定の方法を付加することにより、パッケージ全体の処理を簡素化します。

iptables によって提供されるさまざまなテーブルには次のものがあります。

  • フィルタ テーブル: パケット フィルタリングの決定タイプを指定します。簡単に言えば、荷物が目的地に到着するかどうかを決定します。
  • NAT テーブル: アドレス変換の決定タイプを指定します。ここで、パケットのルーティングは NAT ネットワークに基づいて決定されます。たとえば、パッケージが NAT にアクセスできない場合、パッケージはスキップされて、非 NAT ネットワークの検索を試みます。
  • Mangle テーブル: パッケージの特別な処理ニーズを管理します。たとえば、TTL 値などのパケットのヘッダー情報を変更するように設定できます。
  • Raw テーブル: Raw テーブルを使用すると、iptables ファイアウォールのステートフルな側面を熱心に操作できます。このテーブルを使用すると、Linux カーネルが状態の追跡を開始する前に、パケットの「状態」に基づいてパケットをルーティングできます。これは主に、接続追跡システムがパケットを処理するかどうかに関係なく、パケットをマークするために使用されます。パケットが追跡されない場合、パケットは NOTRACK ターゲットに設定されます。
IPtables テーブル
IPtables テーブル

チェーン

そして、「テーブル」の中に「チェーン」があります。

これらのチェーンは、経路のさまざまな段階で詳細なパケット検査を処理します。たとえば、ポートまたはネットワーク インターフェイスに到達したときにそれらを検査できます。このようにして、パッケージがシステムのプロセスにリリースされる前に決定を下すことができます。

テーブルと同様に、さまざまなチェーンも入手できます。これらには次のものが含まれます。

  • PREROUTING チェーン: ここでは、ルールはネットワーク インターフェイスで到着したばかりのパケットを処理します。
  • INPUT チェーン: INPUT チェーンで説明されているルールは、受信接続の動作を処理します。完了すると、ローカル プロセスに渡されます。
  • OUTPUT チェーン: OUTPUT チェーンは、プロセスが生成するパケットを処理します。
  • FORWARD チェーン: FORWARD チェーンは、ローカル システム向けではないパケットを管理します。これは、ルーターなどの他の宛先システムのキャリアです。
  • POSTROUTING チェーン: 最後に、ネットワーク インターフェイスを通って出ようとしているパケットを処理する POSTROUTING チェーンがあります。
Iptables チェーン
Iptables チェーン

各テーブルですべてのチェーンが利用できるわけではありません。たとえば、FORWARD チェーンはマングル、フィルター、セキュリティ テーブルでのみ使用できます。同様に、POSTROUTING チェーンは、mangle および nat (SNAT) で使用できます。すべてのテーブルで OUTPUT チェーンのみが使用可能です。

目標

さて、私たちには「目標」があります。パッケージが到着すると、チェーンを移動して、どのルールの説明が最も適合するかを確認します。ルールの説明に適合する場合、それに基づいて関連付けられたアクションを実行し、ターゲットに移動して、パケットの運命を決定します。

多くの場合、パケットはどの説明やルールセットにも適合しません。そこで、デフォルトのポリシーであるターゲットが登場します。

ターゲットには、ACCEPT、DROP、および REJECT を指定できます。これらはパケットの運命を決定する終端ターゲットです。

  • ACCEPT: パケットを受け入れます。
  • DROP: パケットをドロップし、送信者がシステムが存在するかどうかを認識できないようにします。
  • REJECT: パケットを拒否します。

主にパケットに関する情報を保存するために使用される非終端ターゲットもあります。

最も一般的な iptables コマンドと例

iptables コマンドの実行を開始する前に、次のことを確認してください。

  • コマンドを実行するための管理アクセス権を持っています。管理者権限が原因でコマンドが失敗した場合は、先頭に sudo コマンドを付けてコマンドを再実行します。
  • この記事は 、Ubuntu で iptables を構成する方法に関するチュートリアルではありません
  • IPv4 で動作する iptables コマンドを使用します。 IPv6 を使用する場合は、代わりに ip6tables を 使用する必要があります。
25 以上の最も一般的な iptables コマンドと例
25 以上の最も一般的な iptables コマンドと例

iptablesのステータスを確認する

現在の iptables のステータスを確認するには、次のコマンドを実行する必要があります。

 $ iptables -L -n -v
 #output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

上記の出力には多くの情報が含まれています。ただし、これはファイアウォールが非アクティブであることを示唆するものでもあります。これは、現在、すべてのチェーンが ACCEPT に設定されており、ルールがないためです。

ファイアウォールをアクティブ化するには、ルールの追加を開始する必要があります。

チェーンへのルールの追加

ルールを追加すると、ルールは常にチェーンに追加されます。したがって、 -A (追加) オプション を使用する必要があります。その構文は次のとおりです。

 $ sudo iptables - A

ただし、実行すると次のものが返されます。

 iptables v1.8.7 (nf_tables): option "-A" requires an argument

Try `iptables -h' or 'iptables --help' for more information.

ルールを追加するために使用できる引数は次のとおりです。

  • – i: インターフェースを表します。ここで、ルールを追加するインターフェイスについて言及できます。 ppp0、eth0 などを指定できます。
  • – p: プロトコルの略です。ここでは、ネットワーク プロトコルを使用してパッカーをフィルタリングするルールについて言及しています。たとえば、ICMP、TCP、UDP などと指定できます。ルールをすべてのプロトコルで機能させる場合は、引数値として「all」を指定します。
  • – s: 次に、トラフィックの送信元 (IP アドレスまたはホスト名) を指定するsource 引数が続きます。
  • – dport: dport は宛先ポートを表し、パケットの宛先となるポート番号を指定します。
  • – j: 最後に、TARGET 引数があり、TARGET 名、ACCEPT、DROP、または RETURN を指定できます。

コマンドを次の順序で記述することも重要です。

 $ sudo iptables -A <chain-name> -i <interface-name> - p <protocool-name> - s <source> --dport <port no.> -j <target>

iptables への変更の保存

ルールを追加したら、 iptables -save コマンドを使用してルールを保存できます。

 $ sudo iptables -save

出力は次のとおりです。

 nitt@logan99:~$ sudo iptables-save

# Generated by iptables-save v1.8.7 on Sun May 14 13:37:34 2023

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

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

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 392 -j REJECT --reject-with icmp-port-unreachable

-A OUTPUT -o lo -j ACCEPT

COMMIT

# Completed on Sun May 14 13:37:34 2023

ルールを手動で永続化する

デフォルトでは、iptables はルールを保存しません。したがって、コンピュータを再起動すると、すべてのルールが削除されます。 iptables を再構成する必要がないようにするには、次のコマンドを使用する必要があります。

IPv4 ルールの場合は、次のコマンドを作成します。

 $ sudo iptables-save > /etc/iptables/rules.v4

IPv6 ルールの場合は、次のコマンドを記述します。

 $ sudo iptables-save > /etc/iptables/rules.v6

ルールを自動的に永続化する

再起動後もルールを持続させ、それを自動的に行うには、 iptables-presistent パッケージをインストールする必要があります。

これを行うには、次のコマンドを実行します。

 $ sudo apt-get install iptables-persistent

次のウィンドウが開きます。 <はい>でEnterを押します。

iptables-永続的
iptables-永続的

IPv4 テーブルを操作しているため、IPv4 ルールのみが表示されます。 IPv6 で作業している場合は、関連するウィンドウが表示されます。

注: パッケージは、保存された iptables ルールのみをロードします。したがって、iptables を変更するたびに、次のように保存する必要があります。 iptables -save コマンド。

再起動後のルールのリロード

ルールを保存したら、次のコマンドを使用してルールを復元する必要があります。

 $ sudo iptables-restore < /etc/iptables/rules.v4

そして

$ sudo iptables-restore < /etc/iptables/rules.v6

ローカルホストでのトラフィックの有効化 / ループバックの有効化

Localhost でトラフィックを有効にするには、次のコマンドを使用します。

 $ sudo iptables -A INPUT -i lo -j ACCEPT

ここで、 lo は すべてのローカルホスト通信のループバック インターフェイスを表します。

同様に、パケットがループバック インターフェイスを経由して送信されるようにすることもできます。

 $ sudo iptables -A OUTPUT -o lo -j ACCEPT

ルールがどのように変更されたかを確認するには、 iptables -L -n -V を実行します。

 #output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

特定のポートでのトラフィックの有効化

特定のポートでのトラフィックの ACCEPT または REJECT を有効にすることができます。

たとえば、SSL、HTTP、SSH ポートは、アプリが正常に機能するために重要です。ポート番号を介して ACCEPT パケットにルールを追加して、ルールが意図したとおりに動作することを確認できます。

SSL の場合は、次のコマンドを実行します。

 $ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

HTTPS の場合は、次のコマンドを実行します。

 $ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

eth0 インターフェイスですべての HTTPS トラフィックを許可します。

 $ iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

SSH の場合は、次のコマンドを実行します。

 $ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

また、eth0 インターフェイスですべての受信 SSH トラフィックを受け入れるには、次のコマンドを実行します。

 $ iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

別の例としては、カスタム アプリの特定のポートでポート トラフィックを有効にすることが挙げられます。ポート 233 としましょう。

そのポートで接続を開くには、実行します。

 $ sudo iptables -A INPUT -p tcp --dport 233 -j ACCEPT

同様に、REJECT ターゲット オプションを使用して、特定のポートでの接続を無効にすることもできます。

ポート 392 でのすべての接続をブロックしましょう。

 $ sudo iptables -A INPUT -p tcp --dport 392 -j REJECT

確認するには、 iptables -L -n -v コマンドを実行します。

 #output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:233

    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

 0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

既存のルールの削除

既存のルールを削除するには、次のコマンドを実行する必要があります。

 $ iptables -F

または

$ iptables --flush

注: ルールを保存していない場合、ルールは永久に失われ、 iptables -restore を 使用して復元することはできません。

行番号を含むルールの削除

特定のルールを削除するには、番号付きのルールのリストを取得する必要があります。

 $ sudo iptables -L --line-numbers
 #output

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

3    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https

4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:233

5    REJECT     tcp  --  anywhere             anywhere             tcp dpt:392 reject-with icmp-port-unreachable

INPUT チェーンのルール番号 4 を削除する場合は、次のコマンドを実行します。

 $ sudo iptables -D INPUT 4

そして、再度 iptables -n -v -L コマンドを実行するとします。

 #output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

INPUT または OUTPUT チェーン ルールのみを表示

INPUT チェーン ルールのみを表示するには、次のコマンドを実行します。

 $ sudo iptables -L INPUT -n -v --line-numbers
 #ouput

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

num   pkts bytes target     prot opt in     out     source               destination

1        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

2        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

3        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

4        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

同様に、OUTPUT チェーン ルールのみを表示したい場合は、次を実行します。

 $ sudo iptables -L OUTPUT -n -v --line-numbers
 #output

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

num   pkts bytes target     prot opt in     out     source               destination

1        0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

ファイアウォールの開始/停止/再起動

RHEL/Fedora Linux または CentOS を使用している場合は、コマンドを実行してファイアウォールを開始/停止または再起動できます。

 $ service iptables stop

$ service iptables start

$ service iptables restart

systemctl コマンドを使用することもできます。

ただし、Ubuntu では動作しません。

特定の場所にルールを挿入する

特定の位置にルールを挿入する場合は、次のコマンドを使用する必要があります。

まずはルールを確認しましょう。

 $ sudo iptables -L INPUT -n --line-numbers
 #output

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443

4    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

2 と 3 の間にルールを挿入する場合は、次のコマンドを実行します。

 $ sudo iptables -I INPUT 3 -s 252.32.1.2 -j DROP

次に、更新されたルールを確認します。

 #output

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

3    DROP       all  --  252.32.1.2           0.0.0.0/0

4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443

5    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

受信トラフィックはブロックしますが、送信トラフィックは許可します

すべての受信トラフィックをブロックするには、次のコマンドを入力する必要があります。

 $ iptables -P INPUT DROP

$ iptables -P FORWARD DROP

$ iptables -P OUTPUT ACCEPT

$ iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -L -v -n

このようにして、パッケージを ping したりダウンロードしたりしながら、不明な受信トラフィックをブロックできます。

特定のIPアドレスをブロックする

特定の IP アドレスをブロックするには、次のコマンドを実行します。

 $ iptables -A INPUT -s 14.23.59.9 -J DROP

ブロックされた IP アドレスを保存する変数を定義して、コマンドを実行することもできます。

 BLOCK_THE_IP = “a.b.c.d”

そして、次を実行します。

 $ iptables -A INPUT -s “BLOCK_THE_IP” -j DROP

注: 「abcd」を希望の IP アドレスに変更します。

外部からのシステム ping の許可

外部ユーザーにサーバーに ping を送信して、ネットワークを検出できるようにすることができます。

 $ sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

$ sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

内部ネットワークが外部ネットワークと通信できるようにする

次のコマンドを実行して、内部ネットワーク (eth0 としましょう) から外部ネットワーク (eth1 としましょう) へのアクセスを許可します。

 $ sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

アウトバウンドDNSを許可する

サーバーへの DNS 接続を許可するには、次のコマンドを実行します。

 $ iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT

$ iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

特定のネットワークからの Rsycn を許可する

Rsync コマンドを使用し、特定のネットワーク上でそれを有効にしたい場合は、次のコマンドを実行します。

 iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

ブロックポート

次のコマンドを実行して、特定のポートと受信リクエストをブロックします。

 iptables -A INPUT -p tcp --dport 80 -j DROP

iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

特定の IP アドレスへの送信トラフィックをブロックする

次のコマンドを実行すると、任意の IP アドレスへのトラフィックをブロックできます。

 $ host -t a .com

#出力

.com のアドレスは 172.66.40.93 です。

特定の IP アドレスへの送信トラフィックをブロックするには、次のコマンドを実行します。

 iptables -A OUTPUT -d 72.66.40.93 -j DROP

ソーシャルメディアプラットフォームをブロックする

同様に、Instagram、Twitter、Facebook などのソーシャル メディア プラットフォームをブロックすることもできます。

次のコマンドを実行して、ソーシャル メディアの IP アドレスを見つけます。

 $ host -t a social-media-web-adrress.com

たとえば、Instagram の場合は次のようになります。

 $ host -t a www.instagram.com

次に、特定のソーシャル メディア プラットフォームの IP アドレスの CIDR を見つける必要があります。

 $ whois 185.89.219.11 | grep CIDR

注: sudo apt-get install whois を実行して Whois パッケージをインストールする必要がある場合があります。

ここで、次の方法で CIDR 値を入力します。

 $ iptables - A OUTPUT -p tcp -d CIDR-value -j DROP

注: 必ず CIDR 値を適宜変更してください。

ICMP Ping リクエストを許可またはブロックする

ICMP ping リクエストを許可またはブロックするには、次のコマンドを実行します。

 $ iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

$ iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP

特定の範囲のポートを開く

一定範囲のポートを開くには、次のコマンドを実行します。

 $ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8933: 8500 -j ACCEPT

NAT ルールのリストを表示する

NAT ルールを一覧表示するには、次のコマンドを実行します。

 $ sudo iptables -t nat -L -n -v

または

$ sudo iptables -t nat -v -L -n --line-number

パッケージカウンターをリセットする

現在の iptables カウンタを確認するには:

 $ sudo iptables -L -n -v

カウンタをリセットまたはクリアするには、次のコマンドを実行します。

 $ sudo iptables -Z

$ sudo iptables -L -n -v

INPUT チェーン カウンターのみをリセットするには、次のコマンドを実行します。

 $ iptables -Z INPUT

特定のルール カウンタをリセットするには、次のコマンドを実行します。

 $ iptables -z INPUT RULE-NUMBER

RULE-NUMBER をその特定のルールに変更してください。

最後の言葉

iptables は、強力なファイアウォール コマンドライン ユーティリティです。ネットワーク リソース、パケット、インターフェイス、および特定のシナリオに関連するほとんどすべてを構成できます。

また、iptables には多くのオプションが用意されています。 man コマンドを使用してメイン ページを確認し、全体像を把握してください。

 $ man iptables
$ man ip6tables

次に、ネットワーク ファイアウォールと、それが攻撃の阻止にどのように役立つかを確認してください。

「 25 以上の最も一般的な iptables コマンドと例」についてわかりやすく解説!絶対に観るべきベスト2動画

システムの保守と運用管理/リソース監視(Linux学習)
現場で役立つヤマハルーターコマンド集