로그 정보가 특정 파일에 /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
다음과 같은 속성 기반 필터를 만들 수 있습니다.
# /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
& ~
노트:두 번째 방법은 페어링이 필요하지 않습니다 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
}