不正な通信に対して,通信の自動遮断(portsentry を使用)(Ubuntu 上)
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行う際には, 次のコマンドを実行する.
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# (オプション) 必要に応じてシステムを再起動
sudo shutdown -r now
インストールと設定(Ubuntu 上)
- インストール
# パッケージリストの情報を更新 sudo apt update sudo apt -y install portsentry
- インストール中にPortsentryの設定に関する質問が表示される場合がある.表示を確認し,環境に合わせて適切に応答する必要がある.
-
/etc/portsentry/portsentry.conf の設定
このファイルでは,監視対象ポート,検知モード,遮断方法など,Portsentryの主要な動作を設定する.
監視対象ポートの設定
TCP_PORTS
およびUDP_PORTS
の行で,監視対象とするポート番号を指定する.デフォルトでは一般的なポートがリストアップされているが,必要に応じて追記または変更する.検知モードの設定
Portsentryは複数の検知モードをサポートする.主なモードとして,Port Bound Detection (モード 0), Stealth Scan Detection (モード 1), Advanced Stealth Scan Detection (モード 2) がある.より高度なスキャンを検知するためには,Stealth Scan Detection (モード 1) や Advanced Stealth Scan Detection (モード 2) を有効化することが推奨される場合がある.
- モード 0 (Port Bound Detection): ポートが実際にバインド(待ち受け)されている場合にアクセスを検知する基本的なモードである.
- モード 1 (Stealth Scan Detection - stcp/sudp): ポートがバインドされているかに関わらず,特定のパケットパターンからステルススキャンを検知するモードである.
- モード 2 (Advanced Stealth Scan Detection - atcp/audp): 最も高度な検知モードであり,より複雑なスキャン手法に対応する.誤検知のリスクも伴うため,慎重な設定とテストが必要である.
使用する検知モードは,
SCAN_DETECTION_MODE
およびADVANCED_SCAN_DETECTION_MODE
等の項目で設定する.必要に応じて該当行のコメントアウト (#) を解除し,モード番号を指定する.高度なモード(atcp/audp)では,確立済み接続からのトラフィックを追跡することで,正規の通信を誤検知しないように設計されている.SCAN_TRIGGER設定を調整することで,一定回数の接続試行があった場合のみブロックするように設定し,誤検知を減らすことも可能である.遮断コマンドの設定
不正通信を検知した際に実行するコマンドを
KILL_ROUTE
で設定する.デフォルトでは iptables を使用する設定が記載されている.KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP"
注意: Ubuntu 24.04 LTSではnftablesが標準のファイアウォールフレームワークとなっている場合がある.設定した遮断ルールがシステムで使用されているファイアウォール(例: nftables)と正しく連携するか確認が必要な場合がある.nftablesを使用する場合は,
KILL_ROUTE
設定を以下のように変更することが推奨される.KILL_ROUTE="/usr/sbin/nft insert rule inet filter input position 0 ip saddr $TARGET$ counter drop comment 'portsentry block'"
PortsentryはTCPとUDPの両方のプロトコルで同時に異なるモードで実行することができ,詳細な設定は
/etc/default/portsentry
で行う.UDPポートスキャン検知(特にBLOCK_UDP
オプション)は,インターネットに直接接続されたサーバーではなりすましによるサービス拒否攻撃を受けるリスクがあるため,慎重な設定が必要である. - 監視対象から除外する IP アドレスを記載する.
内部ネットワークのホストなど,監視対象から除外したいIPアドレスやネットワークを以下のファイルに記載する.監視対象から除外しない場合,正当な通信も不正通信と判定され,自動でアクセスが遮断される可能性があるため,設定に注意が必要である.
◆ /etc/portsentry/portsentry.ignore.static の設定
次のように設定する.「XXX.YYY」は適切に読み替えてください.CIDR表記 (例: 192.168.1.0/24, 127.0.0.1/32) が使用可能である.
XXX.YYY.0.0/24 127.0.0.1/32 0.0.0.0
また,
portsentry.conf
内のADVANCED_EXCLUDE_TCP
およびADVANCED_EXCLUDE_UDP
の設定で,特定のポートを監視対象から除外することも可能である.これにより,正規のサービスが誤ってブロックされるのを防止できる. -
設定ファイルを書き換えたため,portsentryサービスを再起動する.Ubuntu 24.04 LTSではsystemdが使用されており,以下のコマンドで再起動する.
sudo systemctl restart portsentry
設定の確認と運用
設定の確認
設定が正しく反映されportsentryが動作しているか確認するために,別のホストから,設定した監視ポートへ意図的にポートスキャンを実行してみる.nmapなどのツールを使用すると良い.設定した遮断ルールが適用され,接続が拒否されることを確認する.また,ログファイル /var/log/syslog
や,ブロックされた履歴が記録される /var/lib/portsentry/portsentry.history
を確認し,検知と遮断が記録されているか確認すると良い.長期運用では,ブロックされたIPアドレスのログを定期的に確認し,誤検知によるブロックが無いかを監視することが重要である.
設定ミスの復旧
設定に誤りがあり,正当な通信まで遮断されてしまった場合は,以下のコマンドで一時的にportsentryサービスを停止する.
sudo systemctl stop portsentry
サービス停止後,設定ファイルを修正し,再度サービスを起動する.
ブロックの解除
誤ってIPアドレスがブロックされてしまった場合は,ブロックリストから該当エントリを削除する必要がある.PortsentryがブロックしたIPアドレスは /var/lib/portsentry/portsentry.blocked
ファイルに記録されるため,このファイルから該当するIPアドレスの行を削除する.また,Portsentryがファイアウォールに追加したルールも手動で削除する必要がある場合がある.iptablesやnftablesコマンドを使用して,該当する遮断ルールを特定し削除する.