답변:
에 대한 맨 페이지를 살펴보십시오 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를 다시 시작하십시오.
데비안 / 우분투
$ 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 규칙에 thils 스위치를 추가하십시오.
–log-prefix NETFILTER
대안으로이 유형의 특성 필터를 사용하여 메시지를 로깅 할 수도 있습니다.
:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~
참고 : 이 두 번째 방법은로 변경할 필요가 없습니다 iptables
.
/var/log/iptables
됩니다 /var/log/messages
. 이 데이터에서 하나의 사본 만 원합니다iptables.log
이것은 정상적인 방화벽과 마찬가지로 방화벽이 이미 로그를 작성한다고 가정합니다. 일부 예의 경우 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
& ~
}
이것은 다른 사람들 (우분투, 데비안, 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 시스템이 가지고있는 것 (모든 배포판이 가지고 있고 없어야한다고 생각합니다) (차이가 "& ~"대신 "중지"인 것 같습니다. 모든 시스템이 두 구문을 모두 지원하는 것은 아닙니다) :
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
}