iptables 메시지를 별도의 파일에 기록하도록 syslog.conf 파일을 어떻게 구성합니까?

iptables 메시지를 별도의 파일에 기록하도록 syslog.conf 파일을 어떻게 구성합니까?

로그 정보가 특정 파일에 /etc/syslog.conf저장되도록 파일을 구성하는 방법입니다 .iptables

이 정보를 별도로 보관하여 내가 원하는 내용을 쉽고 빠르게 추출할 수 있도록 하고 싶습니다.

답변1

시스템 로그

매뉴얼 페이지를 확인해 보세요 iptables. 여기 LOG에는 원하는 작업을 수행하는 이라는 대상이 표시됩니다 .

  1. 로깅 수준을 LOG4로 설정합니다.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. 구성은 syslog.conf이러한 메시지를 별도의 파일에 기록합니다.

    # /etc/syslog.conf
    kern.warning     /var/log/iptables.log
    
  3. 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
}

관련 정보