
특정 파일에 /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를 다시 시작하십시오.
데비안/우분투
$ sudo /etc/init.d/sysklogd restart
페도라/센트OS/RHEL
$ sudo /etc/init.d/syslog restart
메모:이 로깅 방법을 고정 우선순위라고 합니다. 숫자나 이름(1,2,3,4,..) 또는 (DEBUG, WARN, INFO 등)입니다.
rsyslog
우연히 를 사용하는 경우 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
.
참고자료
답변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
}