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


10

특정 파일 /etc/syslog.conf에 대한 로그 정보를 저장하기 위해 파일을 구성하는 방법iptables

이 정보를 따로 저장하여 원하는 것을 쉽고 빠르게 추출 할 수 있습니다.


syslog.conf 또는 rsyslog.conf를 사용하고 있습니까?
slm

답변:


13

syslog

에 대한 맨 페이지를 살펴보십시오 iptables. LOG원하는 것을 수행 할 수 있는 대상을 표시합니다 .

  1. 로깅 레벨 LOG을 4로 설정하십시오 .

    # 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
    

    페도라 / CentOS / 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.

참고 문헌


이 경우 정보가에 저장 /var/log/iptables됩니다 /var/log/messages. 이 데이터에서 하나의 사본 만 원합니다iptables.log
Abid

1
나는 Abid의 질문과 누락 된 logrotate 구성을 다루기 위해 내 자신의 대답을 추가했습니다. "stop"또는 "& ~"는 메시지가 rsyslog의 규칙을 계속하여 / var / log / messages에 도달하지 못하게합니다.
피터

6

이것은 정상적인 방화벽과 마찬가지로 방화벽이 이미 로그를 작성한다고 가정합니다. 일부 예의 경우 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
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.