Làm cách nào tôi có thể định cấu hình tệp syslog.conf để ghi nhật ký tin nhắn iptables trong một tệp riêng biệt?


10

Làm cách nào tôi có thể định cấu hình /etc/syslog.conftệp để lưu thông tin nhật ký iptablestrong một tệp cụ thể.

Tôi muốn lưu các thông tin này một cách riêng biệt, vì vậy tôi có thể trích xuất những gì tôi muốn một cách dễ dàng và nhanh chóng.


Bạn đang sử dụng syslog.conf hay rsyslog.conf?
slm

Câu trả lời:


13

nhật ký hệ thống

Hãy xem trong trang người đàn ông cho iptables. Nó cho thấy một mục tiêu được gọi là LOGcó thể làm những gì bạn muốn.

Thí dụ

  1. Đặt mức ghi nhật ký cho LOG4.

    # DROP everything and Log it
    iptables -A INPUT -j LOG --log-level 4
    iptables -A INPUT -j DROP
    
  2. Cấu hình syslog.confđể viết những tin nhắn này vào một tập tin riêng biệt.

    # /etc/syslog.conf
    kern.warning     /var/log/iptables.log
    
  3. Khởi động lại syslogd.

    Debian / Ubuntu

    $ sudo /etc/init.d/sysklogd restart
    

    Fedora / CentOS / RHEL

    $ sudo /etc/init.d/syslog restart
    

LƯU Ý: Phương pháp ghi nhật ký này được gọi là ưu tiên cố định. Chúng là số hoặc tên (1,2,3,4, ..) hoặc (DEBUG, WARN, INFO, v.v.).

rsyslog

Nếu tình cờ bạn đang sử dụng rsyslog, bạn có thể tạo bộ lọc dựa trên thuộc tính như vậy:

# /etc/rsyslog.conf
:msg, contains, "NETFILTER"       /var/log/iptables.log
:msg, contains, "NETFILTER"     ~

Sau đó thêm chuyển đổi thils vào quy tắc iptables của bạn mà bạn muốn đăng nhập:

–log-prefix NETFILTER

Để thay thế, bạn cũng có thể ghi nhật ký các tin nhắn bằng loại bộ lọc thuộc tính này:

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

LƯU Ý: Phương pháp thứ 2 này không yêu cầu bất kỳ thay đổi nào iptables.

Người giới thiệu


Trong trường hợp này, thông tin sẽ được lưu trong /var/log/iptablesvà cả trong /var/log/messages. Tôi chỉ muốn một bản sao từ dữ liệu này trongiptables.log
Abid

1
Tôi đã thêm câu trả lời của riêng mình để bao gồm câu hỏi của Abid, cộng với cấu hình logrotate bị thiếu. "dừng" hoặc "& ~" ngăn các tin nhắn tiếp tục xuống các quy tắc của rsyslog để đến / var / log / message.
Peter

6

Điều này giả định tường lửa của bạn đã tạo nhật ký, như bất kỳ tường lửa lành mạnh nào cũng nên. Đối với một số ví dụ, nó yêu cầu một thông điệp có thể nhận dạng, chẳng hạn như "NETFILTER" trong ví dụ của slm.

tạo một tập tin trong rsyslog.d

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

Điều này hoạt động trong CentOS 7. Tôi không biết cách xác minh rằng nó đến từ tường lửa ngoài việc tìm kiếm IN và OUT ... CentOS thật kỳ lạ. Đừng sử dụng cái này trừ khi phiên bản tiếp theo không hoạt động.

# into separate file and stop their further processing
if  ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

Điều này cũng hoạt động trong CentOS 7 và cũng kiểm tra nội dung tin nhắn (thay thế "Shorewall" bằng bất cứ thứ gì bạn có trong tin nhắn quy tắc -j LOG của bạn):

# into separate file and stop their further processing
if  ($msg contains 'Shorewall') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    & ~
}

Điều này hoạt động trong những người khác (Ubuntu, Debian, openSUSE). Và đây là cách tốt nhất để làm điều đó. Không tìm kiếm chuỗi trong tin nhắn:

# into separate file and stop their further processing
if  ($syslogfacility-text == 'kern') and \\
($msg contains 'IN=' and $msg contains 'OUT=') \\
then    -/var/log/firewall
    &   ~

Và đây là những gì một máy openSUSE mặc định có (mà tôi nghĩ rằng mọi phân phối nên có và thiếu) (sự khác biệt dường như chỉ là "dừng" thay vì "& ~"; không phải tất cả các hệ thống đều hỗ trợ cả hai cú pháp):

if  ($syslogfacility-text == 'kern') and \
    ($msg contains 'IN=' and $msg contains 'OUT=') \
then {
    -/var/log/firewall
    stop
}

Và đối với tất cả những điều trên, đừng quên một tệp logrotate.d:

vim /etc/logrotate.d/firewall

chứa:

/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
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.