「iptablesを使用してUbuntuで「ポートスキャニング(ポートノック)」を制御する方法」
UbuntuなどのLinuxディストリビューションでは、ネットワークセキュリティを強化するために、さまざまな方法で通信の監視や制御を行います。その中でも、iptablesは最も一般的で強力なファイアウォールツールの1つです。この記事では、Ubuntuで「ポートスキャニング」または「ポートノック」を管理するための方法について詳しく説明します。これにより、ネットワークの不正アクセスを防ぎ、セキュリティを強化することができます。
1. ポートスキャニングとポートノックとは?
ポートスキャニング(ポートノック)は、ネットワーク上のホストが開いているポートをスキャンして、サービスを探し出す行為を指します。攻撃者は、無防備なポートを見つけて不正にアクセスしようとすることが多いため、これを防ぐための対策が必要です。
ポートノックは、特定の順番でポートを叩くことによって、特定のシステムにアクセスする方法です。この手法を使うと、攻撃者はポートを叩く順番を知らない限り、アクセスすることができません。つまり、ポートノックは一種の隠しアクセス手段として機能します。
2. iptablesの基本
iptablesはLinuxのネットワークトラフィックをフィルタリングするためのツールです。ネットワークパケットが受信される際に、そのパケットがどのポートにアクセスするのか、どのように処理するのかを決定します。
基本的な構文は次の通りです:
bashsudo iptables [オプション] [アクション] [チェーン] [条件]
ここでの重要な要素は以下の通りです:
[オプション]:ログの設定やルール追加の詳細オプション。[アクション]:パケットを許可する(ACCEPT)や拒否する(DROP)などのアクション。[チェーン]:入力、出力、転送など、どのネットワークトラフィックに対してルールを適用するか。
3. ポートノックによるアクセス制御
ポートノックを使用するには、特定のポートへのアクセスが正しい順番で行われる必要があります。これを制御するために、iptablesにルールを設定して、攻撃者が間違った順番でポートを叩いた場合にそのアクセスを拒否する仕組みを作ります。
3.1 ポートノックのためのiptablesルール設定
以下の手順で、iptablesを設定してポートノックを管理する方法を説明します。
-
ポートノックのポート設定:
通常、ポートノックには複数のポートが必要です。たとえば、ポート10000、10001、10002の順番でアクセスが行われることを想定します。このポートを開く順番が正しい場合にのみ、特定のサービス(例えばSSH)へのアクセスを許可します。 -
iptablesでルールを作成する:
次のコマンドで、ポートノック用のチェーンとルールを作成します。ここでは、ポート10000、10001、10002を順番に叩いた後、ポート22(SSH)へのアクセスを許可します。bashsudo iptables -N KNOCKING sudo iptables -A INPUT -p tcp --dport 10000 -m state --state NEW -j KNOCK1 sudo iptables -A KNOCK1 -p tcp --dport 10001 -m state --state NEW -j KNOCK2 sudo iptables -A KNOCK2 -p tcp --dport 10002 -m state --state NEW -j ALLOW_SSH sudo iptables -A ALLOW_SSH -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j DROPこのルールでは、最初にポート
10000へのアクセスを受け取った後、ポート10001、さらにポート10002への順番でアクセスが続けば、最終的にSSHポート(22番ポート)へのアクセスが許可されます。それ以外の場合は、すべて拒否されます。 -
ルールの保存と適用:
iptablesの設定は再起動後に失われるため、設定を保存する必要があります。Ubuntuではiptables-persistentパッケージを使用して保存できます。bashsudo apt-get install iptables-persistent sudo netfilter-persistent save
3.2 ポートノックを監視する
ポートノックは、攻撃者が順番を知らないとアクセスできないため、システムへのセキュリティを強化しますが、正しいノック順番が必要です。knockdというデーモンを使うことで、ポートノックのトラフィックを監視し、正しい順番でアクセスされた場合にのみアクセスを許可することができます。
knockdをインストールして設定する手順は次の通りです:
-
knockdのインストール:
bashsudo apt-get install knockd -
設定ファイルの編集:
/etc/knockd.confにポートノックの設定を追加します。例えば、次のように設定します:bash[openSSH] sequence = 10000,10001,10002 seq_timeout = 5 command = /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT tcpflags = synこれで、ポート
10000、10001、10002を順番に叩いた場合に、SSHポートへのアクセスが許可されます。 -
knockdの有効化:
knockdサービスを起動し、自動起動を設定します。bashsudo systemctl enable knockd sudo systemctl start knockd
4. セキュリティの強化
ポートノックの実装に加えて、以下のセキュリティ対策も検討してください:
- SSHのセキュリティ強化:SSH設定ファイル(
/etc/ssh/sshd_config)でパスワード認証を無効にし、公開鍵認証のみを使用する。 - Fail2banの導入:ログイン試行を監視し、複数回失敗したIPアドレスを自動的にブロックするツールで、追加のセキュリティを提供します。
5. まとめ
Ubuntuでポートスキャニングやポートノックを制御することにより、システムのセキュリティを大幅に向上させることができます。iptablesを用いたルール設定やknockdデーモンを活用することで、特定の順番でポートを叩くことでSSHアクセスを許可するなど、細かいセキュリティ制御が可能になります。これにより、不正アクセスを防ぎ、より安全なシステムを維持することができます。
