ホストノードでは、1 人の顧客の VPS が事業全体を危険にさらすことがあります。インターネットをスキャンしたり、スパムを送信したり、DDoS 攻撃に加担したりする VPS は abuse 報告(不正利用の苦情)を招き、IP が Spamhaus などのブラックリストに登録され、IP ブロック全体がフィルタリングされる事態にもつながります。この記事では、KVM ホスト(Proxmox VE または任意の Linux ブリッジ構成)で原因の VPS をすばやく特定し、不正利用の種類を見分け、他の顧客に影響を与えずに止め、よくあるケースを未然に防ぐ方法を解説します。
KVM の VPS には、それぞれホスト上に専用の tap インターフェースがあります(Proxmox VE では、VM 101 なら tap101i0)。tap インターフェースのカウンターはホスト側から見た値なので、rx が VPS から送信された量、tx が VPS が受信した量になります。
# Packets and bytes each VPS sent in the last 10 seconds (rx on the tap = outbound from the VPS)
for t in /sys/class/net/tap*; do n=$(basename $t); echo "$n $(cat $t/statistics/rx_packets) $(cat $t/statistics/rx_bytes)"; done > /tmp/a
sleep 10
for t in /sys/class/net/tap*; do n=$(basename $t); echo "$n $(cat $t/statistics/rx_packets) $(cat $t/statistics/rx_bytes)"; done > /tmp/b
join /tmp/a /tmp/b | awk '{printf "%-12s %8d pps %8.1f Mbps\n", $1, ($4-$2)/10, ($5-$3)*8/10/1000000}' | sort -k2 -nr | head
# Live view of who talks to whom on the bridge
iftop -i vmbr0 -nNP
Mbps はそれほど高くないのに毎秒数万パケットを送信している VPS は、たいていフラッド攻撃かスキャンを行っています。ポート 25 への接続が絶え間なく続いている場合は、たいていスパムです。
# Sample the traffic of one VPS (replace tap101i0)
tcpdump -ni tap101i0 -c 300 -w /root/evidence-vps101-$(date +%F-%H%M).pcap
tcpdump -nr /root/evidence-vps101-*.pcap | head -50
# Outgoing SMTP connections (spam)
tcpdump -ni tap101i0 'tcp dst port 25 and tcp[tcpflags] & tcp-syn != 0' -c 50
# Connections tracked for the VPS's IP (apt install conntrack)
conntrack -L -s 203.0.113.11 2>/dev/null | wc -l
conntrack -L -s 203.0.113.11 2>/dev/null | awk '{print $5}' | sort | uniq -c | sort -nr | head
| 観察される状況 | 考えられる原因 |
|---|---|
| 多数の異なる IP の同じポート(22、23、3389、80)への SYN パケット | ポートスキャンまたはブルートフォース(多くは侵害された VPS から) |
| さまざまなメールサーバーのポート 25 への多数の接続 | スパム、またはハッキングされたメール送信スクリプト |
| 1 つまたは少数の宛先への非常に高い UDP・SYN パケットレート | DDoS への加担 |
| 3333 や 4444 などのポートへの継続的な接続 | 暗号資産のマイニング(通信量としては通常問題ないが、利用規約に違反する場合がある) |
問題を止められる最も穏やかな措置を選び、続くようであれば段階的に強化します。
# Throttle the VPS immediately to about 8 Mbps (rate is in MB/s; keep the NIC's MAC from "qm config")
qm set 101 --net0 virtio=BC:24:11:AA:BB:CC,bridge=vmbr0,firewall=1,rate=1
# Block outbound SMTP for this VPS with the Proxmox firewall
cat >> /etc/pve/firewall/101.fw <<'EOF2'
[RULES]
OUT DROP -p tcp -dport 25 -log nolog
EOF2
# Pause the VPS (keeps memory state for investigation) or shut it down
qm suspend 101
qm shutdown 101
ファイルに [RULES] セクションがすでにある場合は、2 つ目のセクションを追記せず、既存のセクションにルールを追加してください。その後、確認した内容を証拠とともに顧客に伝え、何を修正すべきかを説明します。侵害された VPS は、通常 OS の再インストールとパスワードの変更が必要です(Linux でのマルウェアの発見と駆除を参照)。
報告には速やかに返信し、対象の IP、送信元を特定した時刻、実施した措置(帯域制限、ポート 25 のブロック、VPS の停止)、顧客に連絡済みであることを伝えます。迅速で明確な回答こそが、上流ネットワークやブラックリスト運営者に対して IP ブロックの信頼を保つ鍵です。
# Datacenter-wide security group in /etc/pve/firewall/cluster.fw
[group no-smtp]
OUT DROP -p tcp -dport 25 -log nolog
# Use it in each VPS file, e.g. /etc/pve/firewall/101.fw
[RULES]
GROUP no-smtp
スキャンやブルートフォースは、ごくわずかな帯域しか使いません。Mbps だけでなく、パケットレートと接続数(ステップ1とステップ2)を確認してください。
パネルまたは VM の設定を検索します。grep -r 203.0.113.11 /etc/pve/qemu-server/ /etc/pve/firewall/ を実行すると、その IP を使用している VM がわかります。
不正利用が繰り返されたり報告に回答しなかったりすると、IP がブラックリストに登録され、上流プロバイダーが自社ネットワークを守るために該当アドレスをフィルタリングせざるを得なくなることがあります。上記の手順で迅速に対処し、実施した内容を添えて報告に回答すれば、影響を該当の VPS だけにとどめられます。
上記の手順で解決しない場合は、サポートチケットを送信して IMIDC の 24 時間 365 日対応テクニカルサポートへご連絡ください。ホストサーバーの IP、影響を受けた IP アドレス、abuse 報告の参照番号、上記コマンドの出力を添えていただくと、より迅速に調査できます。