Ini mengasumsikan firewall Anda sudah membuat log, seperti firewall waras yang seharusnya. Untuk beberapa contoh, ini membutuhkan pesan yang dapat diidentifikasi, seperti "NETFILTER" dalam contoh slm.
buat file di rsyslog.d
vim /etc/rsyslog.d/10-firewall.conf
Ini berfungsi di CentOS 7. Saya tidak tahu cara memverifikasi bahwa itu berasal dari firewall selain mencari IN dan OUT ... CentOS aneh. Jangan gunakan ini kecuali versi berikutnya tidak berfungsi.
# into separate file and stop their further processing
if ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
& ~
}
Ini berfungsi di CentOS 7 dan memeriksa konten pesan juga (ganti "Shorewall" dengan apa pun yang Anda miliki di pesan aturan -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
& ~
}
Ini berfungsi di orang lain (Ubuntu, Debian, openSUSE). Dan ini adalah cara terbaik untuk melakukannya. Tidak mencari string dalam pesan:
# into separate file and stop their further processing
if ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then -/var/log/firewall
& ~
Dan inilah yang dimiliki oleh mesin openSUSE default (yang saya pikir setiap distro seharusnya ada dan tidak ada) (perbedaannya sepertinya hanya "berhenti" daripada "& ~"; tidak semua sistem mendukung kedua sintaksis):
if ($syslogfacility-text == 'kern') and \
($msg contains 'IN=' and $msg contains 'OUT=') \
then {
-/var/log/firewall
stop
}
Dan untuk semua hal di atas, jangan lupa file logrotate.d juga:
vim /etc/logrotate.d/firewall
mengandung:
/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
}