Debian 10 Buster では、Docker コンテナが Docker ホストまたは Docker ブリッジインターフェイスに対して ping を実行できないが、インターネットにアクセスできる問題に直面しました。
アクセスを許可しても(ここに関連する質問に表示されます)、私の状況は解決されません。 iptables/nftablesに関連しているようです。最初にエラーを記録する方法がわかったら、何をすべきかを知ることができます。
DOCKER-USER
両方にログルールを入力しましたが、両方とも書き込まれINPUT
た
nft insert rule ip filter DOCKER-USER counter log
パケットはゼロとして表示されます。
/var/log/kern.log
ファイアウォール関連情報を表示しませんjournalctl -k
。
このシステムを使用してファイアウォールのアクティビティを表示する新しい方法はどうですかnftables
?
nft list ip table filter
table ip filter {
chain INPUT {
type filter hook input priority 0; policy drop;
ct state invalid counter packets 80 bytes 3200 drop
iifname "vif*" meta l4proto udp udp dport 68 counter packets 0 bytes 0 drop
ct state related,established counter packets 9479197 bytes 17035404271 accept
iifname "vif*" meta l4proto icmp counter packets 0 bytes 0 accept
iifname "lo" counter packets 9167 bytes 477120 accept
iifname "vif*" counter packets 0 bytes 0 reject with icmp type host-prohibited
counter packets 28575 bytes 1717278 drop
counter packets 0 bytes 0 log
counter packets 0 bytes 0 log
iifname "docker0" counter packets 0 bytes 0 accept
}
chain FORWARD {
type filter hook forward priority 0; policy drop;
counter packets 880249 bytes 851779418 jump DOCKER-ISOLATION-STAGE-1
oifname "br-cc7b89b40bee" ct state related,established counter packets 7586 bytes 14719677 accept
oifname "br-cc7b89b40bee" counter packets 0 bytes 0 jump DOCKER
iifname "br-cc7b89b40bee" oifname != "br-cc7b89b40bee" counter packets 5312 bytes 2458488 accept
iifname "br-cc7b89b40bee" oifname "br-cc7b89b40bee" counter packets 0 bytes 0 accept
oifname "br-d41d1510d330" ct state related,established counter packets 8330 bytes 7303256 accept
oifname "br-d41d1510d330" counter packets 0 bytes 0 jump DOCKER
iifname "br-d41d1510d330" oifname != "br-d41d1510d330" counter packets 7750 bytes 7569465 accept
iifname "br-d41d1510d330" oifname "br-d41d1510d330" counter packets 0 bytes 0 accept
oifname "br-79fccb9a0478" ct state related,established counter packets 11828 bytes 474832 accept
oifname "br-79fccb9a0478" counter packets 11796 bytes 707760 jump DOCKER
iifname "br-79fccb9a0478" oifname != "br-79fccb9a0478" counter packets 7 bytes 526 accept
iifname "br-79fccb9a0478" oifname "br-79fccb9a0478" counter packets 11796 bytes 707760 accept
counter packets 1756295 bytes 1727495359 jump DOCKER-USER
oifname "docker0" ct state related,established counter packets 1010328 bytes 1597833795 accept
oifname "docker0" counter packets 0 bytes 0 jump DOCKER
iifname "docker0" oifname != "docker0" counter packets 284235 bytes 16037499 accept
iifname "docker0" oifname "docker0" counter packets 0 bytes 0 accept
ct state invalid counter packets 0 bytes 0 drop
ct state related,established counter packets 0 bytes 0 accept
counter packets 0 bytes 0 jump QBS-FORWARD
iifname "vif*" oifname "vif*" counter packets 0 bytes 0 drop
iifname "vif*" counter packets 0 bytes 0 accept
counter packets 0 bytes 0 drop
}
chain OUTPUT {
type filter hook output priority 0; policy accept;
}
chain QBS-FORWARD {
}
chain DOCKER {
}
chain DOCKER-ISOLATION-STAGE-1 {
iifname "br-cc7b89b40bee" oifname != "br-cc7b89b40bee" counter packets 5312 bytes 2458488 jump DOCKER-ISOLATION-STAGE-2
iifname "br-d41d1510d330" oifname != "br-d41d1510d330" counter packets 7750 bytes 7569465 jump DOCKER-ISOLATION-STAGE-2
iifname "br-79fccb9a0478" oifname != "br-79fccb9a0478" counter packets 7 bytes 526 jump DOCKER-ISOLATION-STAGE-2
iifname "docker0" oifname != "docker0" counter packets 590138 bytes 34612496 jump DOCKER-ISOLATION-STAGE-2
counter packets 1808904 bytes 1760729363 return
}
chain DOCKER-ISOLATION-STAGE-2 {
oifname "br-cc7b89b40bee" counter packets 0 bytes 0 drop
oifname "br-d41d1510d330" counter packets 0 bytes 0 drop
oifname "br-79fccb9a0478" counter packets 0 bytes 0 drop
oifname "docker0" counter packets 0 bytes 0 drop
counter packets 644929 bytes 74784737 return
}
chain DOCKER-USER {
counter packets 0 bytes 0 log
iifname "docker0" counter packets 305903 bytes 18574997 accept
counter packets 1450392 bytes 1708920362 return
}
}
ベストアンサー1
あなたはそれを使用することができますnftrace
パケットフローを追跡します。非常に冗長ですが、カーネルログには入らず、マルチキャストネットリンクソケットを介して配布されます(つまり、何も受信しない場合、トレースは "/ dev / null"にのみ入ります)。
本当にすべてを追跡したい場合は、追跡してください。事前ルーティングそして出力優先順位が低いです。nft list ip table filter
実際に表示される内容は別の表を使用することをお勧めします。nftablesのiptables操作しないでくださいxtマッチングレイヤAPIとの互換性(ただし、トレースで使用するのは安全です)また、iptablesには次のような他のテーブルがあるかもしれないことに注意する必要があります。ナットテーブル。
traceall.nft
したがって、ロードされたファイルのルールセットを使用すると、次のようになりますnft -f traceall.nft
。
table ip traceall
delete table ip traceall
table ip traceall {
chain prerouting {
type filter hook prerouting priority -350; policy accept;
meta nftrace set 1
}
chain output {
type filter hook output priority -350; policy accept;
meta nftrace set 1
}
}
これで、次のコマンドを使用して非常に詳細なIPv4トレースを追跡できます。
nft monitor trace
コンテナ内で実行していても同じことを行います(通常はログターゲットではありません)。
これらのトレースを他の場所で有効または有効にする前に、優先順位の低いルールに条件を入れることで、すべてのフック/チェーン追跡を防ぐことができます。この図は、イベントの順序を理解するのに役立ちます。一般ネットワークのNetfilterとパケットフロー。
同等のものを使用することを選択した場合-j TRACE
目標はiptables、その方にもご相談くださいxtables-monitor
、なぜならnftablesのiptables行動を変える(比較iptables - 旧バージョン)。
OPの質問に答えながら、質問とログの問題に関するいくつかのおおよその推測は次のとおりです。
Docker自体がコンテナで実行されている場合、ログを使用できない可能性があります。ホストに提供することができ、そしてすべてのコンテナ
sysctl -w net.netfilter.nf_log_all_netns=1
カーネルメッセージには名前空間インスタンスがないため、カーネルメッセージのクエリが許可されます。カウンターは丸太ルールIPフィルタ入力は0ですが、前のルールのカウンタは減らす文はそうではありません。これは、ロギングルールが遅すぎて作成されたことを意味します。減らす。これ丸太ルール(またはむしろiptables)
-j LOG
を挿入する必要があります今後決勝減らす絶対にアクセスできない場所に追加されない文です。Dockerに関連する唯一の入力規則は
iifname "docker0" counter packets 0 bytes 0 accept
。コンテナがプライマリDockerネットワークにない場合、ホストに到達することを許可するルールはありません。これをテストするには、ルールを追加してみてください。結果が以前に挿入されたことを確認します。減らすルール。使用iptables、ルール追加の防止nftables互換性がない可能性があります。nftablesのiptables:
iptables -I INPUT 8 -i "br-*" -j ACCEPT