導入
Iptablesは、ほとんどのLinuxシステムのネットワークセキュリティにおいて基本的な役割を果たすファイアウォールです。多くのiptablesチュートリアルでは、サーバーを保護するためのファイアウォールルールの作成方法を説明していますが、このチュートリアルでは、ファイアウォール管理の別の側面、つまりルールの一覧表示と削除に焦点を当てています。.
このチュートリアルでは、次の iptables タスクを実行する方法について説明します。
- ルールを列挙する
- パケットとバイトカウンタをクリアする
- ルールを削除する
- チェーンのフラッシュ(チェーン内のすべてのルールの削除)
- すべてのチェーンとテーブルをクリアし、すべてのチェーンを削除し、すべてのトラフィックを受け入れます
前提条件
このチュートリアルでは、iptablesコマンドがインストールされたLinuxサーバーを使用し、ユーザーがsudo権限を持っていることを前提としています。初期設定についてご不明な点がある場合は、Ubuntu 20.04での初期サーバー設定ガイドをご覧ください。.
仕様別のリストルール
まず、ルールの一覧表示方法を見てみましょう。アクティブなiptablesルールを表示する方法は2つあります。表形式とルール仕様の一覧です。どちらの方法でも、形式は異なりますが、ほぼ同じ情報が表示されます。.
仕様別にアクティブな iptables ルールをすべて一覧表示するには、-S オプションを指定して iptables コマンドを実行します。
sudo iptables -SOutput
-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-persistentまたはiptables saveを使用したことがある場合、これもiptablesルール設定ファイルと同様になります。.
特定のチェーンをリストする
出力を特定のチェーン(INPUT、OUTPUT、TCP など)に制限する場合は、オプションの直後にチェーン名を指定できます。 -S たとえば、TCP チェーン内のすべてのルールを表示するには、次のコマンドを実行します。
sudo iptables -S TCPOutput
-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPTここで、アクティブな iptables ルールをルール テーブルとして表示する別の方法を見てみましょう。.
表にルールをリストする
iptablesルールをテーブル形式で一覧表示すると、異なるルール同士を比較するのに役立ちます。アクティブなiptablesルールをすべてテーブル形式で出力するには、iptablesコマンドに-Lオプションを付けて実行します。
sudo iptables -Lこれにより、チェーンごとにソートされた現在のすべてのルールが生成されます。.
出力を特定のチェーン (INPUT、OUTPUT、TCP など) に制限する場合は、-L オプションの直後にチェーン名を指定できます。.
入力チェーンの例を見てみましょう。
sudo iptables -L INPUTOutput
Chain 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)が表示されます。次の行には、テーブル内の各列のヘッダーと、チェーンルールが続きます。各ヘッダーが何を表しているかを確認してみましょう。
- ターゲット: パケットがルールに一致した場合、ターゲットはパケットの処理方法を指定します。例えば、パケットは受け入れ、破棄、ログに記録、あるいは別のチェーンに送られて、より多くのルールと比較されます。.
- prot: tcp、udp、icmp、all などのプロトコル
- opt: あまり使用されないが、この列にはIPオプションが表示される
- ソース: トラフィックの送信元IPアドレスまたはサブネット、あるいは
- 宛先: トラフィックの宛先IPアドレスまたはサブネット、あるいは任意の場所
最後の列(ラベルなし)には、ルールのオプションが表示されます。これは、前の列に表示されていないルールの任意の部分です。送信元ポートと宛先ポートからパケット接続の状態まで、あらゆる情報が含まれます。.
パッケージの数と合計サイズを表示する
iptablesルールを一覧表示する際に、各ルールに一致するパケットの数とパケットの合計サイズ(バイト単位)を表示できます。これは、どのルールがどのパケットに一致するかを大まかに把握したい場合に便利です。これを行うには、-Lオプションと-vオプションを併用します。.
たとえば、-v オプションを指定した INPUT チェーンをもう一度見てみましょう。
sudo iptables -L INPUT -vOutput
Chain 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つの列が追加されました。 パケット そして バイト そうです。.
アクティブなファイアウォール ルールをさまざまな方法で一覧表示する方法を理解したので、パケット カウンターとバイト カウンターをリセットする方法を確認しましょう。.
パケット数と合計サイズをリセットする
ルールのパケットカウンタとバイトカウンタをクリア(ゼロにする)したい場合は、-Z オプションを使用してください。これらのカウンタは再起動時にもリセットされます。これは、サーバーが既存のルールに一致する新しいトラフィックを受信しているかどうかを確認する場合に便利です。.
すべてのチェーンとルールのカウンターをクリアするには、オプションを使用します。 -Z 単独で使用する場合:
sudo iptables -Z特定のチェーン内のすべてのルールのカウンターをクリアするには、オプションを使用します。 -Z チェーンを指定して使用します。例えば、チェーンカウンタをクリアするには 入力 次のコマンドを実行します。
sudo iptables -Z INPUT特定のルールのカウンタをクリアしたい場合は、チェーン名とルール番号を指定します。例えば、チェーンの最初のルールのカウンタをクリアするには、 入力これを実行します:
sudo iptables -Z INPUT 1Iptables のパケット カウンターとバイト カウンターをリセットする方法がわかったので、次に、それらを削除する 2 つの方法を見てみましょう。.
仕様に基づいてルールを削除する
iptablesルールを削除する方法の一つは、ルールを指定することです。これを行うには、iptablesコマンドに-Dオプションを付けてルールを指定します。この方法でルールを削除する場合は、ルールリストの出力(iptables -S)を参照してください。.
たとえば、無効な入力パケットをドロップするルール (-A INPUT -m conntrack –ctstate INVALID -j DROP) を削除する場合は、次のコマンドを実行します。
sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROPルールの作成時の位置を示すために使用される -A オプションはここでは省略する必要があることに注意してください。.
チェーンと番号に基づくルールの削除
iptablesルールを削除する別の方法は、チェーンと行番号を指定することです。ルールの行番号を指定するには、ルールを表形式でリストし、--line-numbersオプションを追加します。
sudo iptables -L --line-numbersOutput
Chain 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これにより、ヘッダーに関連付けられている各ルール行に行番号が追加されます。 番号 表示されます。.
削除したいルールがわかったら、チェーン番号とルール行をメモしてください。次に、iptables -D コマンドにチェーン番号とルールを続けて実行します。.
例えば、無効なパケットをドロップするインバウンドルールを削除したい場合、ルール3はINPUTチェーンにあることがわかります。そのため、次のコマンドを実行する必要があります。
sudo iptables -D INPUT 3
ファイアウォール ルールを削除する方法がわかったので、ルール チェーンをクリアする方法を見てみましょう。.
チェーンを点滅させる
Iptablesは、チェーン内のすべてのルールを削除、つまりチェーンをフラッシュする方法を提供します。このセクションでは、これを行うためのさまざまな方法について説明します。.
チェーンのフラッシュ
特定のチェーンをフラッシュしてチェーン内のすべてのルールを削除するには、-F または同等の -flush オプションと、フラッシュするチェーン名を使用します。.
たとえば、チェーン内のすべてのルールを削除するには 入力次のコマンドを実行します。
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の変更は一時的なものであり、サーバーの再起動後も維持するには保存する必要があることに注意してください。これは、「一般的なファイアウォールルールとコマンド」チュートリアルの「ルールの保存」セクションで説明されています。.









