カテゴリー
開発・Web制作

firewalld でポートフォワーディングのログをとる (CentOS 8)

firewall-cmd で podman に行く通信のログを出してみようと思ったらでなかったので、解決策を調べました。

firewall-cmd の rich-rule でログ出力を設定すると、 INPUT チェーンの中に設定が記述されます。

ただポートフォワーディング (NAT、IP マスカレード) に関しては INPUT チェーンを見ないので、そこに log アクションを書き込んでも実行されないのです。 FORWARD または PREROUTING チェーンに仕込む必要があります。

ログを仕込む

rich-rule では対応できないようなので、 –direct オプションを使用します。

TCP 4321 ポートから 1234 ポートに転送している場合は、以下のように設定します。

firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -m tcp -p tcp --dport 4321 -j LOG --log-prefix "PREROUTING LOG:"

firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -m tcp -p tcp --dport 1234 -j LOG --log-prefix "FORWARD LOG:"

PREROUTING はポート変更前、 FORWARD はポート変更後のログが出ます。

削除する場合は --add-rule--remove-rule に置き換えて実行すれば削除されます。

ログを見る

ログを見る場合は journalctl を使用します。

journalctl -f -t kernel -g "PREROUTING LOG:"
journalctl -f -t kernel -g "FORWARD LOG:"

-f は –follow オプションです。ログをターミナル上で流すやつです。

ファイアーウォールのログは SYSLOG_IDENTIFIER : kernel で記録されるので、 -t オプションに kernel を指定して絞り込みます。

-g は –grep オプションです。ログメッセージをパターンで絞り込みます。

nftables を覗いてみる

firewall-cmd が実際何を設定しているかは nft コマンドを使って参照できます。

nft list tables コマンドでテーブルの一覧を出せます。

# nft list tables
table ip filter
table ip6 filter
table bridge filter
table ip security
table ip raw
table ip mangle
table ip nat
table ip6 security
table ip6 raw
table ip6 mangle
table ip6 nat
table bridge nat
table inet firewalld
table ip firewalld
table ip6 firewalld

nft list コマンドで上記一覧のテーブル名を指定すると中身を見ることができます。

# nft list table ip filter
table ip filter {
        chain INPUT {
                type filter hook input priority filter; policy accept;
        }

        chain FORWARD {
                type filter hook forward priority filter; policy accept;
        }

        chain OUTPUT {
                type filter hook output priority filter; policy accept;
        }
}

firewall-cmd から設定したものは、テーブル名の後ろに firewalld が付いているテーブルに保存されています。

podman (正確には CNI の port-mapping プラグインだと思われる) のポートマッピングの設定は table ip nat または table ip6 nat に記述されます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください