iptables メッセージを別のファイルに記録するには、syslog.conf ファイルをどのように構成すればよいですか?

iptables メッセージを別のファイルに記録するには、syslog.conf ファイルをどのように構成すればよいですか?

特定のファイル/etc/syslog.confにログ情報を保存するためにファイルをどのように構成すればよいですか。iptables

これらの情報を別々に保存して、必要なものを簡単に素早く抽出できるようにしたいと考えています。

答え1

シスログ

のマニュアル ページを見てください。そこには、必要な操作を実行できる というiptablesターゲットが表示されています。LOG

  1. のログレベルをLOG4 に設定します。

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. syslog.confこれらのメッセージを別のファイルに書き込むように設定します。

    # /etc/syslog.conf
    kern.warning     /var/log/iptables.log
    
  3. syslogdを再起動します。

    デビアン/Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    フェドラ/CentOS/RHEL

    $ sudo /etc/init.d/syslog restart
    

注記:このログ記録方法は固定優先度と呼ばれます。固定優先度は、数字または名前 (1、2、3、4、...) または (DEBUG、WARN、INFO など) です。

ログ

を使用している場合はrsyslog、次のようにプロパティ ベースのフィルターを作成できます。

# /etc/rsyslog.conf
:msg, contains, "NETFILTER"       /var/log/iptables.log
:msg, contains, "NETFILTER"     ~

次に、ログに記録する iptables ルールにこのスイッチを追加します。

–log-prefix NETFILTER

代わりに、次のタイプのプロパティ フィルターを使用してメッセージをログに記録することもできます。

:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~

注記:この 2 番目の方法では、 を変更する必要はありませんiptables

参考文献

答え2

これは、正常なファイアウォールであれば当然のことながら、ファイアウォールが既にログを作成していることを前提としています。いくつかの例では、slm の例では「NETFILTER」のように識別可能なメッセージが必要です。

rsyslog.dにファイルを作成する

vim /etc/rsyslog.d/10-firewall.conf

これは CentOS 7 で動作します。IN と OUT を確認する以外に、ファイアウォールから来たかどうかを確認する方法がわかりません... CentOS は奇妙です。次のバージョンで動作しない限り、これを使用しないでください。

# into separate file and stop their further processing
if  ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

これは CentOS 7 で動作し、メッセージの内容もチェックします (「Shorewall」を -j LOG ルールのメッセージにあるものに置き換えます)。

# into separate file and stop their further processing
if  ($msg contains 'Shorewall') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

これは他の環境(Ubuntu、Debian、openSUSE)でも動作します。そして、これが最善の方法です。メッセージ内の文字列を検索する必要はありません。

# into separate file and stop their further processing
if  ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then    -/var/log/firewall
    &   ~

そして、デフォルトの openSUSE マシンには次のものがあります (これはすべてのディストリビューションに備わっているはずで、欠けているものだと思います) (違いは "& ~" ではなく "stop" だけであるようです。すべてのシステムが両方の構文をサポートしているわけではありません)。

if  ($syslogfacility-text == 'kern') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    stop
}

上記のすべてにおいて、logrotate.d ファイルも忘れないでください。

vim /etc/logrotate.d/firewall

含む:

/var/log/firewall {
    rotate 7
    size 500k
    postrotate
        # before using this, run the command yourself to make sure 
        # it is right... the daemon name may vary
        /usr/bin/killall -HUP rsyslogd
    endscript
}

関連情報