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


10

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

これらの情報を個別に保存したいので、必要なものを簡単かつ迅速に抽出できます。


syslog.confまたはrsyslog.confを使用していますか?
slm

回答:


13

Syslog

のマニュアルページをご覧くださいiptables。それはLOGあなたが望むことをすることができると呼ばれるターゲットを示しています。

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

    # 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 / CentOS / RHEL

    $ sudo /etc/init.d/syslog restart
    

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

rsyslog

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

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

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

–log-prefix NETFILTER

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

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

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

参考文献


この場合、情報はとに保存さ/var/log/iptables/var/log/messagesます。このデータのコピーを1つだけ欲しいiptables.log
2013年

1
Abidの質問と、欠落しているlogrotate構成もカバーするために、自分の回答を追加しました。「stop」または「&〜」は、メッセージがrsyslogのルールを継続して/ var / log / messagesに到達するのを防ぎます。
Peter

6

これは、正常なファイアウォールと同様に、ファイアウォールがすでにログを作成していることを前提としています。一部の例では、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
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.