
特定のファイル/etc/syslog.conf
にログ情報を保存するためにファイルをどのように構成すればよいですか。iptables
これらの情報を別々に保存して、必要なものを簡単に素早く抽出できるようにしたいと考えています。
答え1
シスログ
のマニュアル ページを見てください。そこには、必要な操作を実行できる というiptables
ターゲットが表示されています。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を再起動します。
デビアン/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
}