序章
Iptablesは、ほとんどのLinuxシステムのネットワークセキュリティで重要な役割を果たすファイアウォールです。 多くのiptablesチュートリアルでは、サーバーを保護するためのファイアウォールルールの作成方法を説明していますが、これはファイアウォール管理の別の側面であるルールの一覧表示と削除に焦点を当てています。
このチュートリアルでは、次のiptablesタスクを実行する方法について説明します。
- リストルール
- パケットおよびバイトカウンターのクリア
- ルールを削除する
- チェーンをフラッシュする(チェーン内のすべてのルールを削除する)
- すべてのチェーンとテーブルをフラッシュし、すべてのチェーンを削除して、すべてのトラフィックを受け入れます
注:ファイアウォールを使用する場合は、SSHトラフィック(ポート)をブロックして自分のサーバーから自分をロックアウトしないように注意してください。 :22
、デフォルト)。 ファイアウォールの設定が原因でアクセスできなくなった場合は、アクセスを修正するために帯域外コンソールを介してファイアウォールに接続する必要がある場合があります。
前提条件
このチュートリアルでは、Linuxサーバーを使用していることを前提としています。 iptables
コマンドがインストールされており、ユーザーが sudo
特権。
この初期設定についてサポートが必要な場合は、 Ubuntu20.04を使用した初期サーバー設定ガイドを参照してください。 DebianおよびCentOSでも利用できます。
仕様によるリストルール
最初にルールをリストする方法を見てみましょう。 アクティブなiptablesルールを表示するには、テーブル内またはルール仕様のリストとして2つの方法があります。 どちらの方法でも、ほぼ同じ情報が異なる形式で提供されます。
アクティブなiptablesルールをすべて仕様別に一覧表示するには、次のコマンドを実行します。 iptables
とのコマンド -S
オプション:
- sudo iptables -S
Output-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
...
ご覧のとおり、出力は、それらを作成するために使用されたコマンドと同じように見えます。 iptables
指図。 これは、これまでに使用したことがある場合は、iptablesルール構成ファイルにも似ています。 iptables-persistent
また iptables save
.
特定のチェーンの一覧表示
出力を特定のチェーンに制限する場合(INPUT
, OUTPUT
, TCP
、など)、チェーン名の直後に指定できます -S
オプション。 たとえば、のすべてのルール仕様を表示するには TCP
チェーンの場合、次のコマンドを実行します。
- sudo iptables -S TCP
Output-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
次に、アクティブなiptablesルールをルールのテーブルとして表示する別の方法を見てみましょう。
ルールをテーブルとしてリストする
テーブルビューにiptablesルールを一覧表示すると、さまざまなルールを相互に比較するのに役立ちます。 テーブル内のすべてのアクティブなiptablesルールを出力するには、 iptables
とのコマンド -L
オプション:
- sudo iptables -L
これにより、チェーンでソートされた現在のすべてのルールが出力されます。
出力を特定のチェーンに制限する場合(INPUT
, OUTPUT
, TCP
、など)、チェーン名の直後に指定できます -L
オプション。
例を見てみましょう INPUT
鎖:
- sudo iptables -L INPUT
OutputChain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
UDP udp -- anywhere anywhere ctstate NEW
TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP icmp -- anywhere anywhere ctstate NEW
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
出力の最初の行はチェーン名を示します(INPUT
、この場合)、その後にデフォルトのポリシー(DROP
). 次の行は、テーブルの各列のヘッダーで構成され、その後にチェーンのルールが続きます。 各ヘッダーが何を示しているかを見てみましょう。
target
:パケットがルールに一致する場合、ターゲットはそれをどのように処理するかを指定します。 たとえば、パケットを受け入れたり、ドロップしたり、ログに記録したり、別のチェーンに送信して、他のルールと比較したりできます。prot
:プロトコルなどtcp
,udp
,icmp
、 またall
opt
:めったに使用されません。この列はIPオプションを示しますsource
:トラフィックの送信元IPアドレスまたはサブネット、またはanywhere
destination
:トラフィックの宛先IPアドレスまたはサブネット、またはanywhere
ラベルが付いていない最後の列は、ルールのオプションを示しています。 これは、前の列で示されていないルールの一部です。 これは、送信元ポートと宛先ポートからパケットの接続状態まで、何でもかまいません。
パケット数と集計サイズの表示
iptablesルールを一覧表示するときに、特定の各ルールに一致したパケットの数とパケットの合計サイズをバイト単位で表示することもできます。 これは、どのルールがパケットと一致しているかを大まかに把握しようとするときに役立つことがよくあります。 これを行うには、 -L
と -v
一緒にオプション。
たとえば、 INPUT
再びチェーン、 -v
オプション:
- sudo iptables -L INPUT -v
OutputChain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 DROP all -- any any anywhere anywhere ctstate INVALID
396 63275 UDP udp -- any any anywhere anywhere ctstate NEW
17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW
396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable
2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
リストに2つの追加の列があることに注意してください。 pkts
と bytes
.
さまざまな方法でアクティブなファイアウォールルールを一覧表示する方法がわかったので、パケットカウンターとバイトカウンターをリセットする方法を見てみましょう。
パケット数と集計サイズのリセット
ルールのパケットカウンターとバイトカウンターをクリアまたはゼロにする場合は、 -Z
オプション。 また、再起動が発生した場合にもリセットされます。 これは、サーバーが既存のルールに一致する新しいトラフィックを受信しているかどうかを確認する場合に役立ちます。
すべてのチェーンとルールのカウンターをクリアするには、 -Z
オプション自体:
- sudo iptables -Z
特定のチェーン内のすべてのルールのカウンターをクリアするには、 -Z
オプションを選択し、チェーンを指定します。 たとえば、 INPUT
チェーンカウンターは次のコマンドを実行します。
- sudo iptables -Z INPUT
特定のルールのカウンターをクリアする場合は、チェーン名とルール番号を指定します。 たとえば、の最初のルールのカウンターをゼロにするには INPUT
チェーン、これを実行します:
- sudo iptables -Z INPUT 1
iptablesのパケットとバイトカウンターをリセットする方法がわかったので、それらを削除するために使用できる2つの方法を見てみましょう。
仕様によるルールの削除
iptablesルールを削除する方法の1つは、ルールの指定によるものです。 そうするために、あなたは実行することができます iptables
とのコマンド -D
オプションの後にルール仕様が続きます。 この方法を使用してルールを削除する場合は、ルールリストの出力を使用できます。 iptables -S
、いくつかの助けのために。
たとえば、無効な着信パケットをドロップするルールを削除する場合(-A INPUT -m conntrack --ctstate INVALID -j DROP
)、次のコマンドを実行できます。
- sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP
に注意してください -A
作成時にルールの位置を示すために使用されるオプションは、ここでは除外する必要があります。
チェーンと番号によるルールの削除
iptablesルールを削除するもう1つの方法は、チェーンと行番号です。 ルールの行番号を決定するには、ルールを表形式でリストし、 --line-numbers
オプション:
- sudo iptables -L --line-numbers
OutputChain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT all -- anywhere anywhere
3 DROP all -- anywhere anywhere ctstate INVALID
4 UDP udp -- anywhere anywhere ctstate NEW
5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6 ICMP icmp -- anywhere anywhere ctstate NEW
7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
8 REJECT tcp -- anywhere anywhere reject-with tcp-reset
9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
...
これにより、各ルール行に行番号が追加されます。 num
ヘッダ。
削除するルールが決まったら、ルールのチェーンと行番号をメモします。 次に、を実行します iptables -D
コマンドの後にチェーンとルール番号が続きます。
たとえば、無効なパケットをドロップする入力ルールを削除する場合、それがルールであることがわかります。 3
の INPUT
鎖。 したがって、次のコマンドを実行する必要があります。
- sudo iptables -D INPUT 3
個々のファイアウォールルールを削除する方法がわかったので、ルールのチェーンをフラッシュする方法を見ていきましょう。
フラッシングチェーン
Iptablesは、チェーン内のすべてのルールを削除する方法、またはチェーンをフラッシュする方法を提供します。 このセクションでは、これを行うためのさまざまな方法について説明します。
警告:デフォルトのポリシーでチェーンをフラッシュすることにより、SSH経由でサーバーから自分自身をロックアウトしないように注意してください drop
また deny
. その場合、アクセスを修正するためにコンソールを介して接続する必要がある場合があります。
シングルチェーンのフラッシング
チェーン内のすべてのルールを削除する特定のチェーンをフラッシュするには、 -F
、または同等のもの --flush
、オプション、およびフラッシュするチェーンの名前。
たとえば、のすべてのルールを削除するには INPUT
チェーン、次のコマンドを実行します:
- sudo iptables -F INPUT
すべてのチェーンをフラッシュする
すべてのファイアウォールルールを削除するすべてのチェーンをフラッシュするには、 -F
、または同等のもの --flush
、オプション自体:
- sudo iptables -F
すべてのルールをフラッシュし、すべてのチェーンを削除し、すべてを受け入れる
このセクションでは、すべてのファイアウォールルール、テーブル、およびチェーンをフラッシュし、すべてのネットワークトラフィックを許可する方法を示します。
警告:これにより、ファイアウォールが効果的に無効になります。 ファイアウォールの構成を最初からやり直す場合にのみ、このセクションに従う必要があります。
まず、各組み込みチェーンのデフォルトポリシーを次のように設定します。 ACCEPT
. これを行う主な理由は、SSH経由でサーバーからロックアウトされないようにするためです。
- sudo iptables -P INPUT ACCEPT
- sudo iptables -P FORWARD ACCEPT
- sudo iptables -P OUTPUT ACCEPT
次に、 nat
と mangle
テーブル、すべてのチェーンをフラッシュします(-F
)、デフォルト以外のチェーンをすべて削除します(-X
):
- sudo iptables -t nat -F
- sudo iptables -t mangle -F
- sudo iptables -F
- sudo iptables -X
これで、ファイアウォールがすべてのネットワークトラフィックを許可します。 ここでルールをリストすると、ルールはなく、デフォルトのチェーンは3つだけであることがわかります(INPUT
, FORWARD
、 と OUTPUT
) 残る。
結論
このチュートリアルを終えた後、iptablesファイアウォールルールを一覧表示および削除する方法を確認しました。
iptablesは、 iptables
コマンドは一時的なものであり、サーバーの再起動後も保持するには保存する必要があります。 これについては、一般的なファイアウォールのルールとコマンドのチュートリアルのルールの保存セクションで説明されています。