/etc/syslog.conf
ファイルiptables
に関するログ情報を特定のファイルに保存します。
これらの情報を個別に保存したいので、必要なものを簡単かつ迅速に抽出できます。
iptables
のmanページをご覧ください。 LOG
と呼ばれるターゲットが表示され、目的を実行できます。
LOG
のログレベルを4に設定します。
# DROP everything and Log it
iptables -A INPUT -j LOG --log-level 4
iptables -A INPUT -j DROP
構成、設定 syslog.conf
これらのメッセージを別のファイルに書き込みます。
# /etc/syslog.conf
kern.warning /var/log/iptables.log
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
を使用している場合は、次のようにプロパティベースのフィルターを作成できます。
# /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
を変更する必要はありません。
これは、正常なファイアウォールと同様に、ファイアウォールがすでにログを作成していることを前提としています。一部の例では、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
}