當我們運用 iptables 限制同一IP單位時間連線數時,無法得知有那些IP被DROP掉,這時可利用iptables增加一個chain來做log,並將它獨立到其他的LOG檔,而非/var/log/messages。
在/etc/sysconfig/iptables中修改設定,新建立一個chain,再將log及DROP的規則放到這個chain裡,只要事件觸發套用這個chain即可:
建立新的chain:-N LOG_AND_DROP
-A LOG_AND_DROP -j LOG --log-prefix "iptables DROP: " --log-level 7
-A LOG_AND_DROP -j DROP
再將相關的rule套用這個chain:-A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 600 --hitcount 5 --name SSH_LOG --rsource -j LOG_AND_DROP
-A INPUT -p tcp --dport 22 -m recent --set --name SSH_LOG --rsource
-A INPUT -p tcp --dport 22 -j ACCEPT
在CentOS 6.3中可在 /etc/rsyslog.d/ 中建立一個新的 conf 檔/etc/rsyslog.d/iptables.conf::msg,contains,"iptables DROP: " /var/log/iptables.log
& ~
它即會將LOG_AND_DROP的事件記錄到 /var/log/iptables.log 中。
CentOS 6.3及較早的版本,可直接在 /etc/rsyslog.conf 或 /etc/syslog.conf 中加入log的設定檔:kern.=7 /var/log/iptables.log
重新啟動syslogd(或rsyslogd)及iptables後,即會開始將log記錄到/var/log/iptables.log中:#service syslogd restart
#service iptables restart
在iptables.log就可以看到相關的記錄:Jan 30 04:51:30 hostname kernel: iptables DROP: IN=eth0 OUT= MAC=00:15:5d:43:b9:02:ff:34:96:20:c4:a4:28:00 SRC=118.174.1.133 DST=xxx.xxx.xxx.xxx LEN=60 TOS=0x00 PREC=0x00 TTL=50 ID=4358 DF PROTO=TCP SPT=51329 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
如果要加入 logrotate,則可在 /etc/logrotate.d/syslog 中,加入 /var/log/iptables.log ,讓它一併做logrotate:
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/iptables.log
{
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
設定好後,即可定時將記錄檔一併做rotate,再加上compress的選項更可節省空間。