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 を再起動します。

    Debian/Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    Fedora/セントOS/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
}

関連情報