Linux: logwatch (8) terlalu berisik. Bagaimana saya bisa mengendalikan tingkat kebisingan?

30

Sistem Linux kami menjalankan utilitas logwatch (8) secara default. Pada sistem RedHat / CentOS / SL, Logwatch dipanggil oleh /etc/cron.daily/cronjob, yang kemudian mengirimkan email setiap hari dengan hasilnya. Email-email ini memiliki subjek seperti:

Subject: Logwatch for $HOSTNAME

Masalahnya adalah bahwa secara default email harian ini terlalu berisik dan mengandung banyak informasi yang berlebihan (kesalahan HTTP, penggunaan disk harian, dll) yang sudah dipantau oleh layanan lain (Nagios, Cacti, syslog pusat, dll). Untuk 100 sistem, beban email tidak tertahankan. Orang-orang mengabaikan email, yang berarti bahwa kami mungkin kehilangan masalah yang diambil oleh logwatch.

Bagaimana saya bisa mengurangi jumlah kebisingan yang dihasilkan oleh logwatch, tetapi masih menggunakan logwatch untuk memberi tahu kami tentang masalah yang signifikan?

Saya akan mengirimkan jawaban saya sendiri di bawah ini, tetapi saya ingin melihat apa yang telah dilakukan orang lain.

Catatan : Saya punya pertanyaan serupa tentang FreeBSD, di FreeBSD: periodic (8) terlalu berisik. Bagaimana saya bisa mengendalikan tingkat kebisingan?

Stefan Lasiewski
sumber

Jawaban:

39

Secara keseluruhan, dokumentasi yang tersedia untuk Logwatch tidak memiliki penjelasan yang memadai dan seringkali terlalu kabur. Saya menyatukan beberapa contoh berguna, dan telah mengurangi kebisingan Logwatch lebih dari 95%.

Inilah yang saya temukan.

Ingatlah bahwa Anda dapat menemukan beberapa dokumentasi Logwatch /usr/share/doc/logwatch-*/HOWTO-Customize-LogWatch, dan itu berisi beberapa contoh berguna.

  1. Pada RHEL / CentOS / SL, konfigurasi logwatch default berada di bawah /usr/share/logwatch/default.conf/logwatch.conf

    Pengaturan ini dapat diganti dengan menempatkan konfigurasi lokal Anda di bawah /etc/logwatch/conf/logwatch.conf. Tempatkan yang berikut di file itu untuk memberi tahu logwatch untuk sepenuhnya mengabaikan layanan seperti 'httpd' dan pemeriksaan penggunaan disk harian:

    # Don't spam about the following Services
    Service = "-http"
    Service = "-zz-disk_space"
    
  2. Kadang-kadang saya tidak ingin sepenuhnya menonaktifkan logwatch untuk layanan tertentu, saya hanya ingin menyempurnakan hasilnya untuk membuat mereka kurang berisik. /usr/share/logwatch/default.conf/services/*.confberisi konfigurasi default untuk layanan. Parameter ini dapat ditimpa dengan menempatkan konfigurasi lokal Anda di bawah /etc/logwatch/conf/services/$SERVICE.conf. Sayangnya, kemampuan logwatch di sini terbatas, dan banyak executable logwatch penuh dengan Perl yang tidak terdokumentasi. Pilihan Anda adalah mengganti yang dapat dieksekusi dengan yang lain, atau mencoba menimpa beberapa pengaturan menggunakan /etc/logwatch/conf/services.

    Misalnya, saya memiliki pemindai keamanan yang menjalankan pemindaian di seluruh jaringan. Saat tes berjalan, pemindai keamanan menghasilkan banyak pesan kesalahan dalam log aplikasi. Saya ingin logwatch mengabaikan kesalahan dari pemindai keamanan saya, tetapi masih memberi tahu saya tentang serangan dari host lain. Ini tercakup secara lebih rinci di Logwatch: Abaikan IP tertentu untuk pemeriksaan SSH & PAM? . Untuk melakukan ini, saya menempatkan yang berikut ini di bawah /etc/logwatch/conf/services/sshd.conf:

    # Ignore these hosts
    *Remove = 192.168.100.1
    *Remove = X.Y.123.123
    # Ignore these usernames
    *Remove = testuser
    # Ignore other noise. Note that we need to escape the ()
    *Remove = "pam_succeed_if\(sshd:auth\): error retrieving information about user netscan.*
    

    "

  3. logwatch juga memungkinkan Anda untuk menghapus output dari email logwatch dengan menempatkan ekspresi reguler di /etc/logwatch/conf/ignore.conf. HOWTO-Customize-LogWatch mengatakan:

    Abaikan.conf: File ini menentukan ekspresi reguler yang, ketika dicocokkan dengan output logwatch, akan menekan baris yang cocok, terlepas dari layanan mana yang sedang dieksekusi.

    Namun, saya belum beruntung dengan ini. Persyaratan saya memerlukan pernyataan bersyarat, yang merupakan sesuatu seperti 'Jika ada peringatan keamanan karena pemindai keamanan saya, maka jangan cetak hasilnya. Tetapi jika ada peringatan keamanan dari pemindai keamanan saya dan dari beberapa orang jahat, kemudian cetak bagian yang bermanfaat - Header yang bertuliskan "Gagal login dari:", IP dari host yang buruk, tetapi bukan IP dari pemindai. '

  4. Gigit di sumbernya (Seperti yang disarankan oleh @ user48838). Pesan-pesan ini dihasilkan oleh beberapa aplikasi, dan kemudian Logwatch dengan senang hati memuntahkan hasilnya kepada Anda. Dalam kasus ini, Anda dapat memodifikasi aplikasi untuk mencatat lebih sedikit.

    Ini tidak selalu diinginkan, karena kadang-kadang Anda ingin log lengkap dikirim ke suatu tempat (ke server syslog Tengah, server IDS pusat, Splunk, Nagios, dll.), Tetapi Anda tidak ingin logwatch mengirimi Anda email tentang ini dari setiap server, setiap hari.

Stefan Lasiewski
sumber
Ini persis apa yang saya lakukan, tetapi jika saya ingat dengan benar, ada beberapa layanan (saya percaya ada hubungannya dengan penolakan email) yang tidak diurai dengan benar dari log dan karena itu terdaftar dalam semacam kategori "lain" dan seluruh baris dari log dikirim melalui email. Ini sangat bising. Karena itu saya baru saja mengedit kode sumber logwatch dan menambahkan / mengubah filter masing-masing dan mungkin memotong 20kb per email. Ini beberapa tahun yang lalu, jadi saya yakin logwatch telah membaik sejak saat itu, tetapi saya belum memperbarui versi saya jika belum.
Mike
5

Ya - logwatch seringkali terlalu berisik. Anda telah menyebutkan bahwa menonaktifkan cek sepenuhnya.

Jika Anda tidak ingin melakukan itu, Anda harus mencegah peristiwa tertentu muncul. Sebagai contoh - tidak menarik jika nagios terhubung melalui ssh ke sistem DMZ. Tetapi menarik jika ada login lain melalui ssh.

Kami menggunakan rsyslog alih-alih ksyslogd (instal rsyslog terlebih dahulu, kemudian hapus ksyslogd). Dengan rsyslog Anda dapat memperbaiki apa yang masuk ke log dan apa yang tidak (misalnya membangun ekspresi yang menjatuhkan pesan dari sshd yang berisi "nagios terhubung"). Dengan begitu logwatch hanya akan melaporkan informasi bermanfaat.

Kasus lain mungkin xinetd - Saya tidak ingin mendapat informasi tentang koneksi yang berhasil - ini dapat dikonfigurasi dalam xinetd itselv - tanpa menonaktifkan logwatch-check untuk xinetd.

Nils
sumber
3

Yang menarik, saya mengikuti opsi 2 dari jawaban Stefan Lasiewski, tetapi untuk tujuan saya, saya hanya ingin memasukkan garis-garis tertentu daripada mengecualikan semua kebisingan yang tidak saya inginkan.

Saya mengkonfigurasi vsftpd jadi saya membuat /etc/logwatch/conf/services/vsftpd.confdan bukannya menggunakan sesuatu seperti *Remove = testuseryang menghapus baris yang menyertakan teks testusersaya menggunakan baris *OnlyContains = "testuser"yang hanya mengembalikan baris termasuk teks itu.

2 skrip ini bekerja pada dasarnya dengan menggunakan grepdan grep -v.

Perbedaannya adalah bahwa Anda dapat menggunakan *Removesebanyak yang Anda inginkan tetapi dengan *OnlyContainsAnda harus menggunakannya sekali jika Anda menginginkan sesuatu atau sesuatu yang lain atau sesuatu yang lain. Jadi untuk beberapa nilai yang Anda lakukan*OnlyContains = "testuser|testuser2|testuser3"

Yakub Tomlinson
sumber
1

Sudahkah Anda mempertimbangkan menyalurkan pesan status email ke listserver, mungkin yang dapat memberikan intisari berdasarkan atribut ukuran dan / atau durasi / umur yang dapat diprogram? Pendekatan ini tidak mengurangi jumlah logging yang dikirim melalui email, tetapi dapat mengontrol jumlah email individu dengan batching untuk mengurangi frekuensi email.

pengguna48838
sumber
Saya sudah. Kami juga mempertimbangkan solusi syslog-only, di mana kami menyaring beberapa kebisingan. Namun, untuk kesederhanaan kami ingin melihat apakah mungkin untuk mengendalikan hal ini di sumbernya.
Stefan Lasiewski
1
Jika Anda melihat "menggigit" pada sumbernya dan meminimalkan kesalahan dalam melakukannya, maka Anda dapat mempertimbangkan membatasi upaya untuk menyesuaikan tingkat logging ketika tersedia.
user48838
0

Saya baru-baru ini perlu untuk menenangkan output dari layanan sshd. Beberapa bagian cukup panjang dan tidak dapat dikontrol dengan mengatur level detail.

Ini bukan solusi yang ideal, tetapi akhirnya saya menimpa skrip sshd dengan menyalinnya dari sini: /usr/share/logwatch/scripts/services/sshdke sini:/etc/logwatch/scripts/services/sshd

Tentu saja, Anda sekarang harus mengikuti setiap pembaruan pada file skrip itu, tetapi itu memberi Anda kontrol yang sangat baik atas apa yang dihasilkan. Atau, saya kira Anda bisa menyalurkan output logwatchmelalui alat suka awkatau sedmenghapus apa yang tidak Anda inginkan, tapi itu terasa lebih sulit bagi saya.

Dominic P
sumber
0

Saya memiliki pertanyaan yang sama pada UNIX & Linux Stackexchange dan di sini adalah jawaban saya yang memperbaikinya untuk saya:

Anda dapat memberi tahu logwatch untuk melihat 7 hari alih-alih 1 hari dengan mengubah parameter Range di logwatch.conf:

Range = between -7 days and -1 days

Anda dapat meminta logwatchuntuk menjalankan mingguan alih-alih setiap hari dengan memindahkannya dari direktori cron mingguan ke crondirektori harian :

mv /etc/cron.daily/00logwatch /etc/cron.weekly/

Terima kasih kepada @JeffSchaller

sesuatu Sesuatu
sumber