要約:LXCコンテナにメールサーバー(exim 4、Debian 10)があります。ホストはDebian 11を実行しています。昨夜からスパムトラフィックが流れ込み、LXCホストから入ってくるようです。ただし、tcpdump ログには実際にリモート トラフィックであるとマークされます。どうしたの?
以下は、lxc ホストから来ると思われるスパムのメールサーバーの exim4 ログエントリの例です。
2023-07-23 11:15:51 1qNX42-009wSW-VR <= [email protected] H=LXCHOST (prvzvtrfnh) [LXCHOSTIPV4] P=esmtp S=615 [email protected]
ただし、ホストのtcpdumpログには、次の対応するエントリが表示されます。
14:06:07.165374 IP 39.170.36.149.34307 > MAILSERVERCONTAINER.smtp: Flags [P.], seq 5672:5702, ack 1397, win 27, options [nop,nop,TS val 1151815058 ecr 475541370], length 30: SMTP: MAIL FROM:<[email protected]>
したがって、トラフィックは(中国語)IP 39.170.36.149で発生しているようです。 (IPはコンテナログにまったく表示されません。)それで、このトラフィックがホストからメールサーバーに移動していると表示されるのはなぜですか?
ホストの関連ネットワークインタフェースは次のとおりです。
- eno1、物理インターフェイス
- br0、物理インターフェイスを複数のlxcコンテナに接続するブリッジ
スパムトラフィックを表示するホストのtcpdumpコマンドは次のとおりです。
tcpdump -i br0 port 25 and dst host [MAILSERVERIPV4]
ブリッジインターフェイスの設定は次のとおりです/etc/network/interfaces
。
auto br0
iface br0 inet static
bridge_ports regex eth.* regex eno.*
bridge_fd 0
address HOSTADDRES
netmask 255.255.255.192
gateway HOSTGATEWAY
コンテナとホストの両方が最新のセキュリティ更新プログラムで更新されます。ただし、ホストの稼働時間は248日なので、古いバイナリを実行している可能性があります。
修正する
私は問題がホストのiptablesルールのために発生したと思います-t nat -A POSTROUTING -o br0 -j MASQUERADE
。このルールは、インターネットにアクセスするための外部IPを持たないコンテナに適用されます。私はそれが何をしているのかはっきりと誤解しました。内部IPからインターネットにルーティングされるトラフィックを偽装するだけでは十分ではありませんか?私が理解したように、メールサーバーへの外部トラフィックはブリッジされ、まったくルーティングされません。また、特定のスパマー1人だけが私の設定を利用できました。マイメールサーバーへの通常のトラフィックには外部IPが表示されます。スパマーはどのようにこれを行いますか?
アップデート2:ホストコンピュータにDockerをインストールした後、問題が起動しました。これらの問題を引き起こすのは、dockerとlxcの対話方法ですか?
答え1
iptables
ホストのルールで問題が発生したようです。iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
このルールは、インターネットにアクセスするための外部IPを持たないコンテナに適用されます。
このルールの機能は偽装です。どのトラフィックはを通過しますbr0
。これは、ホストからコンテナへのトラフィック、または(予想どおり)ホストを離れてより広いインターネットに移動するトラフィックです。
ホストコンピュータにDockerをインストールした後、問題が起動しました。これらの問題を引き起こすのは、dockerとlxcの対話方法ですか?
はい、とても可能だと言いたいです。ローカルトラフィックのなりすましを防ぐには、ルールを変更する必要があります。
たとえば、ホストが192.168.1.1(パブリックIPv4アドレスも可能)で、隠されたコンテナサブネットが192.168.1.0/24であるとします。 Dockerが表示され、172.17.0.0/16を占有します。
このルールは、Dockerサブネットを離れるすべてを偽装するように設計されていると仮定できます。
iptables -t nat -A POSTROUTING -o br0 --src 172.17.0.0/24 -j MASQUERADE