ฉันจะกำหนดค่าไฟล์ syslog.conf เพื่อบันทึกข้อความ iptables ในไฟล์แยกกันได้อย่างไร


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

    Debian / Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    Fedora / 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 ของคุณที่คุณต้องการบันทึก:

–log-prefix NETFILTER

นอกจากนี้คุณยังสามารถบันทึกข้อความโดยใช้ตัวกรองคุณสมบัติประเภทนี้:

:msg, startswith, "iptables: " -/var/log/iptables.log
& ~
:msg, regex, "^\[ *[0-9]*\.[0-9]*\] iptables: " -/var/log/iptables.log
& ~

หมายเหตุ:วิธีการนี้ 2 iptablesไม่จำเป็นต้องมีการเปลี่ยนแปลงใด

อ้างอิง


ในกรณีนี้ inforamtion จะถูกบันทึกไว้ในและยังอยู่ใน/var/log/iptables /var/log/messagesฉันต้องการเพียงหนึ่งสำเนาจากข้อมูลนี้ในiptables.log
Abid

1
ฉันได้เพิ่มคำตอบของตัวเองเพื่อครอบคลุมคำถามของ Abid รวมถึงการกำหนดค่า logrotate ที่ขาดหายไป "หยุด" หรือ "& ~" ป้องกันข้อความจากการดำเนินการต่อกฎของ rsyslog เพื่อไปยัง / var / log / ข้อความด้วย
ปีเตอร์

6

สิ่งนี้จะถือว่าไฟร์วอลล์ของคุณสร้างบันทึกอยู่แล้วตามที่ควรจะเป็นไฟร์วอลล์มีสติ สำหรับตัวอย่างมันต้องการข้อความที่ระบุตัวตนได้เช่น "NETFILTER" ในตัวอย่างของ slm

ทำไฟล์ใน rsyslog.d

vim /etc/rsyslog.d/10-firewall.conf

สิ่งนี้ใช้งานได้ใน CentOS 7 ฉันไม่ทราบวิธีตรวจสอบว่ามาจากไฟร์วอลล์อื่นนอกเหนือจากการค้นหาเข้าและออก ... 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 เริ่มต้นมี (ซึ่งฉันคิดว่าทุก distro ควรมีและหายไป) (ความแตกต่างนั้นน่าจะเป็น "หยุด" แทนที่จะเป็น "& ~"; ไม่ใช่ทุกระบบรองรับไวยากรณ์ทั้งสอง):

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.