ネットワーク名前空間内のiptables LOGルール


9

Dockerコンテナーのiptablesルールをセットアップしようとしています。nsenterを使用して、コンテナーのネットワーク名前空間内でiptablesコマンドを実行しています。

# log access to port 8080
PID=$(docker inspect --format "{{.State.Pid}}" $ID)
/home/ubuntu/nsenter -n -t $PID iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 8080 -j LOG

このアプローチは、LOGルールを除いて完全に機能します。それらはどこにも記録しないようです。ホストシステムに適用される同じルールが機能し、にログを記録することに注意してください/var/log/kern.log

これらのログルールの出力はどこにありますか?これはネットワーク名前空間の既知の問題/制限ですか?


更新:NFLOG代わりに試してみましたが、それでも機能しません
Fabian Jakobs、

私はcentos 7に基づくDockerコンテナーを使用してテストを行いましたが、動作します。ホストはcentosです。ubuntuUbuntu 15.04ホストとubuntu 12.04.5コンテナーを使用した同じテストは動作しません。とにかく、syslogホストで実行されています。
c4f4t0r

私はホストとしてDebian wheezyを使用し、コンテナでUbuntu 14.04を使用しています。そこでは機能しません。そこで何が違うのかしら。
ファビアンジェイコブス

これに対する解決策を見つけましたか?
gucki

@gucki名前空間の中で機能させるための解決策は見つかりませんでした。ロギングルールをコンテナの外に移動しました。
Fabian Jakobs、2015年

回答:


8

Donaldが述べたように、コンテナー内のiptables LOGルールはデフォルトで抑制されます。

カーネル<= 4.10では、カーネルにパッチを適用しないとこの動作を調整できませんでした。agrrdが述べたように、回避策は各コンテナーでulogdを実行し、LOGルールの代わりにiptables NFLOG(またはULOG)ルールを使用することです。

ただし、カーネル4.11以降echo 1 > /proc/sys/net/netfilter/nf_log_all_netns、ホスト(コンテナー外)で実行すると、すべてのコンテナー内のiptables LOGルールがホストにログを記録します。 (このカーネルコミットを参照してください。)



1

ulogdをインストールして「-j LOG」を「-j ULOG」に置き換えることで、Dockerコンテナーのiptablesルールをログに記録できました。一致したパケットは/ var / log / ulogディレクトリに記録されます


ulogdをホストにインストールしましたか(ルールからの出力を提供しません)、コンテナー内に起動しましたか(開始しません)?
Phillipp

0

私は(カーネルに関連しない)の使用例を見ました-v /dev/log:/dev/log。同様のことをする必要があるのか​​しら。

また、あなたはnsenterではなくnsenterを使用しているようですdocker exec:どのバージョンのdocker を実行していますか?


dockerをまったく使用しない場合も機能しませんが、コマンドラインから手動でnetnsを実行します。
-gucki

/ proc / kmsgまたは/ dev / kmsgを必要とし、dockerはコンテナーにマウントできないようにします。
Phillipp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.