技術ノート 特徴 Linux ファイアウォールである iptables の初心者ガイド

Linux ファイアウォールである iptables の初心者ガイド

iptables は、Linux オペレーティング システム用に構築された非常に柔軟なファイアウォール ユーティリティです。あなたが初心者の Linux マニアであっても、システム管理者であっても、おそらく iptables を有効に活用できる方法がいくつかあるでしょう。最も汎用性の高い Linux ファイアウォールを構成する方法を説明しますので、読み続けてください。

写真提供 : ezioman

iptables について

iptables は、ポリシー チェーンを使用してトラフィックを許可またはブロックするコマンド ライン ファイアウォール ユーティリティです。システム上で接続が確立しようとすると、iptables はそのリスト内で一致するルールを探します。見つからない場合は、デフォルトのアクションが使用されます。

iptables は、ほとんどの場合、どの Linux ディストリビューションにもプリインストールされています。更新/インストールするには、iptables パッケージを取得するだけです。

sudo apt- get install iptables
 sudo apt- get install iptables

Firestarter など、 iptables に代わる GUI もありますが、いくつかのコマンドを覚えてしまえば、 iptables はそれほど難しくありません。 iptables ルールを構成するときは、特にサーバーに SSH で接続している場合は細心の注意を払う必要があります。コマンドを 1 つ間違えると、物理マシンで手動で修正するまで永久にロックアウトされる可能性があるためです。ポートを開いた場合は、 SSH サーバーをロックダウンする ことを忘れないでください。

Linux ファイアウォールである iptables の初心者ガイド

チェーンの種類

iptables は、入力、転送、出力という 3 つの異なるチェーンを使用します。

入力 – このチェーンは、受信接続の動作を制御するために使用されます。たとえば、ユーザーが PC/サーバーに SSH 接続しようとすると、iptables は IP アドレスとポートを入力チェーン内のルールと照合しようとします。

転送 – このチェーンは、実際にはローカルに配信されていない受信接続に使用されます。ルーターについて考えてみましょう。データは常にルーターに送信されますが、実際にルーター自体に送信されることはほとんどありません。データはターゲットに転送されるだけです。システム上で何らかのルーティング、NAT 処理、または転送が必要な何かを実行していない限り、このチェーンは使用することさえありません。

システムがフォワード チェーンを使用しているかどうか、またはフォワード チェーンを必要としているかどうかを確認する確実な方法が 1 つあります。


 iptables -L -v

上のスクリーンショットは、数週間稼働しているサーバーのもので、受信接続または送信接続に制限はありません。ご覧のとおり、入力チェーンは 11GB のパケットを処理し、出力チェーンは 17GB を処理しました。一方、順方向チェーンは単一のパケットを処理する必要はありません。これは、サーバーがいかなる種類の転送も行っていない、またはパススルー デバイスとして使用されていないためです。

出力 – このチェーンは発信接続に使用されます。たとえば、.com に ping を実行しようとすると、iptables はその出力チェーンをチェックして、接続試行を許可するか拒否するかを決定する前に、ping と .com に関するルールを確認します。

注意点

外部ホストへの ping は出力チェーンを通過するだけで済むように見えますが、データを返すには入力チェーンも使用されることに注意してください。 iptables を使用してシステムをロックダウンする場合は、多くのプロトコルで双方向通信が必要となるため、入力チェーンと出力チェーンの両方を適切に構成する必要があることに注意してください。 SSH は、両方のチェーンで許可することを忘れてしまう一般的なプロトコルです。

Linux ファイアウォールである iptables の初心者ガイド

ポリシーチェーンのデフォルト動作

特定のルールを設定する前に、3 つのチェーンのデフォルトの動作をどのようにするかを決定する必要があります。言い換えれば、接続が既存のルールに一致しない場合に iptables に何をさせたいのでしょうか?

一致しないトラフィックに対してポリシー チェーンが現在どのように設定されているかを確認するには、次のコマンドを実行します。

 iptables -L

指示。

ご覧のとおり、よりクリーンな出力を得るために grep コマンドも使用しました。このスクリーンショットでは、チェーンは現在トラフィックを受け入れていることがわかります。

多くの場合、システムがデフォルトで接続を受け入れるようにする必要があります。以前にポリシー チェーン ルールを変更していない限り、この設定はすでに構成されているはずです。いずれにしても、デフォルトで接続を受け入れるコマンドは次のとおりです。

iptables --policy INPUT ACCEPT
 iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
 iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
 iptables --policy FORWARD ACCEPT

デフォルトで受け入れルールを設定すると、iptables を使用して特定の IP アドレスまたはポート番号を拒否し、他のすべての接続を引き続き受け入れることができます。これらのコマンドについてはすぐに説明します。

すべての接続を拒否し、接続を許可する接続を手動で指定したい場合は、チェーンのデフォルト ポリシーをドロップするように変更する必要があります。これを行うことは、おそらく、機密情報が含まれており、同じ IP アドレスのみが接続されているサーバーにのみ役立ちます。

iptables --policy INPUT DROP
 iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
 iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
 iptables --policy FORWARD DROP 
Linux ファイアウォールである iptables の初心者ガイド

接続固有の応答

デフォルトのチェーン ポリシーを構成したら、iptables へのルールの追加を開始できるようになり、特定の IP アドレスまたはポートからの接続、または特定の IP アドレスまたはポートへの接続が発生したときに何をすべきかを認識できます。このガイドでは、最も基本的でよく使用される 3 つの「応答」について説明します。

承諾 – 接続を許可します。

ドロップ – 接続をドロップし、何も起こらなかったかのように動作します。これは、ソースにシステムの存在を認識させたくない場合に最適です。

拒否 – 接続を許可しませんが、エラーを送り返します。これは、特定のソースをシステムに接続したくないが、ファイアウォールによってブロックされていることを知らせたい場合に最適です。

これら 3 つのルールの違いを示す最良の方法は、これらの各設定に対して iptables が構成されている Linux マシンに PC が ping を試行したときにどのように見えるかを示すことです。

接続を許可する:

接続を切断します:

接続を拒否する:

Linux ファイアウォールである iptables の初心者ガイド

特定の接続を許可またはブロックする

ポリシー チェーンを構成したら、特定のアドレス、アドレス範囲、ポートを許可またはブロックするように iptables を構成できるようになります。これらの例では、接続を次のように設定します。

 DROP

、ただし、次のように切り替えることができます。

 ACCEPT

または

REJECT

、ニーズとポリシー チェーンの構成方法に応じて異なります。

注: これらの例では、

 iptables -A

既存のチェーンにルールを追加します。 iptables はリストの先頭から開始し、一致するルールが見つかるまで各ルールを調べます。ルールを別のルールの上に挿入する必要がある場合は、次のように使用できます。

 iptables -I [chain] [number]

リストに含める番号を指定します。

単一の IP アドレスからの接続

この例では、IP アドレス 10.10.10.10 からのすべての接続をブロックする方法を示します。

iptables -A INPUT -s 10 .10 .10 .10 -j DROP
 iptables -A INPUT -s 10 .10 .10 .10 -j DROP

一定範囲の IP アドレスからの接続

この例では、10.10.10.0/24 ネットワーク範囲内のすべての IP アドレスをブロックする方法を示します。ネットマスクまたは標準のスラッシュ表記を使用して、IP アドレスの範囲を指定できます。

iptables -A INPUT -s 10.10.10.0/24 -j DROP
 iptables -A INPUT -s 10.10.10.0/24 -j DROP

または

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
 iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

特定のポートへの接続

この例では、10.10.10.10 からの SSH 接続をブロックする方法を示します。

iptables -A INPUT -p tcp --dport ssh -s 10 .10 .10 .10 -j DROP
 iptables -A INPUT -p tcp --dport ssh -s 10 .10 .10 .10 -j DROP

「ssh」は任意のプロトコルまたはポート番号に置き換えることができます。の

-p tcp

コードの一部は、プロトコルが使用する接続の種類を iptables に伝えます。 TCP ではなく UDP を使用するプロトコルをブロックしていた場合は、

 -p udp

代わりに必要になります。

この例では、任意の IP アドレスからの SSH 接続をブロックする方法を示します。

iptables -A INPUT -p tcp --dport ssh -j DROP
 iptables -A INPUT -p tcp --dport ssh -j DROP 
Linux ファイアウォールである iptables の初心者ガイド

接続状態

前に述べたように、多くのプロトコルは双方向通信を必要とします。たとえば、システムへの SSH 接続を許可する場合は、入力チェーンと出力チェーンにルールを追加する必要があります。しかし、システムに入る SSH のみを許可したい場合はどうすればよいでしょうか?出力チェーンにルールを追加すると、発信 SSH 試行も許可されませんか?

ここで、接続状態が登場します。これにより、双方向通信を許可するのに必要な機能が得られますが、確立できるのは一方向接続のみです。この例を見てください。10.10.10.10 からの SSH 接続は許可されていますが、10.10.10.10 への SSH 接続は許可されていません。ただし、セッションがすでに確立されている限り、システムは SSH 経由で情報を送り返すことが許可されているため、これら 2 つのホスト間で SSH 通信が可能になります。

iptables -A INPUT -p tcp --dport ssh -s 10 .10 .10 .10 -m state --state NEW , ESTABLISHED -j ACCEPT
 iptables -A INPUT -p tcp --dport ssh -s 10 .10 .10 .10 -m state --state NEW , ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10 .10 .10 .10 -m state --state ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 22 -d 10 .10 .10 .10 -m state --state ESTABLISHED -j ACCEPT 
Linux ファイアウォールである iptables の初心者ガイド

変更の保存

iptables ルールに加えた変更は、変更を保存するコマンドを実行しない限り、次回 iptables サービスが再起動されるときに破棄されます。このコマンドはディストリビューションによって異なる場合があります。

Ubuntu:


 sudo /sbin/iptables-save

レッドハット/CentOS:


 /sbin/service iptables save

または


 /etc/init.d/iptables save

その他のコマンド

現在構成されている iptables ルールをリストします。


 iptables -L

を追加すると、

 -v

オプションを使用すると、パケットとバイトの情報が得られます。

 -n

すべてを数値でリストします。言い換えれば、ホスト名、プロトコル、ネットワークが数字としてリストされます。

現在構成されているルールをすべてクリアするには、flush コマンドを発行します。


 iptables -F 

Linuxコマンド

ファイル

tar pv cat tac chmod grep diff sed ar man pushd popd fsck testdisk seq fd pandoc cd $PATH awk join jq fold uniq journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · · mkdir · du · ln · パッチ · 変換 · rclone · シュレッド · srm · scp · gzip · chattr · カット · 検索 · umask · wc · tr

プロセス

エイリアス · スクリーン · トップ · ナイス · renice · 進行状況 · strace · systemd · tmux · chsh · 履歴 · at · バッチ · フリー · what · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · タイムアウト · ウォール · はい · キル · スリープ · sudo · su · タイム · groupadd · usermod · · lshw · シャットダウン · 再起動 · 停止 · パワーオフ · パスワード · lscpu · crontab · 日付 · bg · fg · pidof · nohup · pmap

ネットワーキング

netstat ping ip ss whois fail2ban bmon dig finger nmap ftp curl wget who whoami w iptables ssh-keygen ufw arping firewalld

関連: 開発者と愛好家のための最高の Linux ラップトップ

「Linux ファイアウォールである iptables の初心者ガイド」に関するベスト動画選定!

ソフォスファイアウォールをブリッジモードでインストール・初期設定する(意外簡単!)
プライバシーを保護しましょう【Linux ファイアウォールインストール編】