kumpulan perintah untuk menampilkan keyword tertentu pada log linux

0
1458

kali ini kita akan membahas beberapa perintah untuk menampilkan keyword pada log, jadi tidak semua hasil log nantinya akan tampil, misalkan kita akan memfilter atau mencari keyword atau log. contoh file log yang akan kita filter adalah /var/log/maillog isinya kurang lebih seperti dibawah ini

May  4 11:01:07 mx1 amavis[25584]: (25584-05) Blocked SPAM {RejectedInbound}, [117.223.53.53]:11904 [117.223.53.53] <20shearer@ sekolahlinux.com> -> <20shearer@ sekolahlinux.com>, Message-ID: <002001d0864c$01e514f5$1f679d9e@aqhptwf>, mail_id: 3fdrZtgTe547, Hits: 145.048, size: 1584, Tests: [AXB_XMAILER_MIMEOLE_OL_024C2=0.001,DATE_IN_FUTURE_03_06=2.426,JAGTEK_ATTACK_A2=110,DOS_OE_TO_MX=0.5,RCVD_IN_BRBL_LASTEXT=2.5,RCVD_IN_PBL=4.7,RDNS_NONE=0.5,SPF_SOFTFAIL=0.972,TO_EQ_FM_DIRECT_MX=0.449,URIBL_BLACK=8.9,URIBL_DBL_SPAM=2.5,URIBL_JP_SURBL=5.8,URIBL_WS_SURBL=5.8], 6990 ms
May  4 12:03:03 mx1 amavis[25527]: (25527-07) Blocked SPAM {RejectedInbound}, [37.150.234.192]:11231 [37.150.234.192] <birzanto@ sekolahlinux.com> -> <birzanto@ sekolahlinux.com>, Message-ID: <24ACC73E224F55DB5338C1DDB0AA24AC@ sekolahlinux.com>, mail_id: hkK1q2qLarYT, Hits: 147.452, size: 1482, Tests: [DATE_IN_FUTURE_03_06=2.426,JAGTEK_ATTACK_A2=110,HELO_DYNAMIC_SPLIT_IP=2.893,RCVD_IN_BRBL_LASTEXT=2.5,RCVD_IN_MSPIKE_BL=0.01,RCVD_IN_MSPIKE_ZBI=0.001,RCVD_IN_PBL=4.7,RDNS_NONE=0.5,SPF_SOFTFAIL=0.972,TO_EQ_FM_DIRECT_MX=0.449,TVD_RCVD_IP=0.001,URIBL_BLACK=8.9,URIBL_DBL_SPAM=2.5,URIBL_JP_SURBL=5.8,URIBL_WS_SURBL=5.8], 7064 ms
May  4 13:05:07 mx1 amavis[24835]: (24835-18) Blocked SPAM {RejectedInbound}, [178.173.247.160]:16014 [178.173.247.160] <h-wibit@ sekolahlinux.com> -> <h-wibit@ sekolahlinux.com>, Message-ID: <55472E25.1637.425516@h-wibit. sekolahlinux.com>, mail_id: J14P-CUIXaCx, Hits: 137.347, size: 1532, Tests: [DATE_IN_FUTURE_03_06=2.426,JAGTEK_ATTACK_A2=110,RDNS_NONE=0.5,SPF_SOFTFAIL=0.972,TO_EQ_FM_DIRECT_MX=0.449,URIBL_BLACK=8.9,URIBL_DBL_SPAM=2.5,URIBL_JP_SURBL=5.8,URIBL_WS_SURBL=5.8], 7446 ms
May  4 13:07:08 mx1 amavis[25397]: (25397-09) Blocked SPAM {RejectedInbound}, [178.89.134.36]:13634 [178.89.134.36] <dcohasset@ sekolahlinux.com> -> <dcohasset@ sekolahlinux.com>, Message-ID: <245325877.201505041500@ sekolahlinux.com>, mail_id: oSE_cDMDgq3X, Hits: 147.441, size: 1460, Tests: [DATE_IN_FUTURE_03_06=2.426,JAGTEK_ATTACK_A2=110,HELO_DYNAMIC_SPLIT_IP=2.893,RCVD_IN_BRBL_LASTEXT=2.5,RCVD_IN_PBL=4.7,RDNS_NONE=0.5,SPF_SOFTFAIL=0.972,TO_EQ_FM_DIRECT_MX=0.449,TVD_RCVD_IP=0.001,URIBL_BLACK=8.9,URIBL_DBL_SPAM=2.5,URIBL_JP_SURBL=5.8,URIBL_WS_SURBL=5.8], 7123 ms

nah berdasarkan log diatas kita hanya ingin menemukan apakah ada log masuk pada tanggal 4 bulan May jam 13:xx di log, kita bisa menggunakan perintah GREP contoh seperti dibawah ini

[root@server ~]# grep 'May  4 13' /var/log/maillog

May  4 13:05:07 mx1 amavis[24835]: (24835-18) Blocked SPAM {RejectedInbound}, [178.173.247.160]:16014 [178.173.247.160] <h-wibit@sekolahlinux.com> -> <h-wibit@sekolahlinux.com>, Message-ID: <55472E25.1637.425516@h-wibit.sekolahlinux.com>, mail_id: J14P-CUIXaCx, Hits: 137.347, size: 1532, Tests: [DATE_IN_FUTURE_03_06=2.426,JAGTEK_ATTACK_A2=110,RDNS_NONE=0.5,SPF_SOFTFAIL=0.972,TO_EQ_FM_DIRECT_MX=0.449,URIBL_BLACK=8.9,URIBL_DBL_SPAM=2.5,URIBL_JP_SURBL=5.8,URIBL_WS_SURBL=5.8], 7446 ms
May  4 13:07:08 mx1 amavis[25397]: (25397-09) Blocked SPAM {RejectedInbound}, [178.89.134.36]:13634 [178.89.134.36] <dewa@sekolahlinux.com> -> <dewa@sekolahlinux.com>, Message-ID: <245325877.201505041500@sekolahlinux.com>, mail_id: oSE_cDMDgq3X, Hits: 147.441, size: 1460, Tests: [DATE_IN_FUTURE_03_06=2.426,JAGTEK_ATTACK_A2=110,HELO_DYNAMIC_SPLIT_IP=2.893,RCVD_IN_BRBL_LASTEXT=2.5,RCVD_IN_PBL=4.7,RDNS_NONE=0.5,SPF_SOFTFAIL=0.972,TO_EQ_FM_DIRECT_MX=0.449,TVD_RCVD_IP=0.001,URIBL_BLACK=8.9,URIBL_DBL_SPAM=2.5,URIBL_JP_SURBL=5.8,URIBL_WS_SURBL=5.8], 7123 ms

maka yang akan ditampilkan hanya pada 4 may jam 13:xx atau jam 1 siang :D.

lalu kita ingin hasil tadi lebih dikerucutkan misalkan pada 4 may jam 13:xx pengiriman atau penerimaan dari dewa@sekolahlinux.com

kita bisa menggunakan cara seperti dibawah ini

[root@server ~]# grep 'May  4 13' /var/log/maillog |grep dewa@sekolahlinux.com

May  4 13:07:08 mx1 amavis[25397]: (25397-09) Blocked SPAM {RejectedInbound}, [178.89.134.36]:13634 [178.89.134.36] <dewa@sekolahlinux.com> -> <dewa@sekolahlinux.com>, Message-ID: <245325877.201505041500@sekolahlinux.com>, mail_id: oSE_cDMDgq3X, Hits: 147.441, size: 1460, Tests: [DATE_IN_FUTURE_03_06=2.426,JAGTEK_ATTACK_A2=110,HELO_DYNAMIC_SPLIT_IP=2.893,RCVD_IN_BRBL_LASTEXT=2.5,RCVD_IN_PBL=4.7,RDNS_NONE=0.5,SPF_SOFTFAIL=0.972,TO_EQ_FM_DIRECT_MX=0.449,TVD_RCVD_IP=0.001,URIBL_BLACK=8.9,URIBL_DBL_SPAM=2.5,URIBL_JP_SURBL=5.8,URIBL_WS_SURBL=5.8], 7123 ms

hasil diatas muncul setelah disaring berdasarkan tanggal dan waktu

dan jika kita hanya ingin mengambil ip addressnya saja untuk ditampilkan bisa menggunakan perintah ini pada terminal anda

[root@server ~]# grep 'May  4 13' /var/log/maillog | grep dewa@sekolahlinux.com | awk {'print $10'} | awk -F"]" {'print $1'} | awk -F"[" {'print $2'} | sort -n | uniq | awk -F"." {'print $1"."$2"."$3"."$4'} | uniq

178.89.134.36

loh kok hasilnya bisa muncul ipnya saja bagaimana penjelesannya.? oke berikut ini saya jelaskan

  • grep ‘May  4 13’ maillogmodif => menampilkan hanya log pada tanggal dan waktu ‘May  4 13’ dengan grep, perlu di perhatikan spasi dll harus sesuai.
  • | => pipa menandakan hasil dari perintah sebelumnya akan di proses kembali oleh perintah selanjutnya
  • grep dewa@sekolahlinux.com => menampilkan baris kalimat yang ada keyword “dewa@sekolahlinux.com”
  • | => pipa menandakan hasil dari perintah sebelumnya akan di proses kembali oleh perintah selanjutnya
  • awk {‘print $10’} => menampilkan hanya column 10 (pemisah column adalah spasi secara default dari AWK)
  • | => pipa menandakan hasil dari perintah sebelumnya akan di proses kembali oleh perintah selanjutnya
  • awk -F”]” {‘print $1’} => menampilkan hanya column 1 (pemisah column adalah “]” sudah dimodifikasi dengan penambahan -F)
  • | => pipa menandakan hasil dari perintah sebelumnya akan di proses kembali oleh perintah selanjutnya
  • awk -F”[” {‘print $2’} => menampilkan hanya column 2 (pemisah column adalah “[” sudah dimodifikasi dengan penambahan -F)
  • | => pipa menandakan hasil dari perintah sebelumnya akan di proses kembali oleh perintah selanjutnya
  • sort -n => hasilnya diurutkan berdasarkan -n Numeric
  • | => pipa menandakan hasil dari perintah sebelumnya akan di proses kembali oleh perintah selanjutnya
  • uniq => hasilnya di filter kembali jika ada hasil yang sama maka hanya ditampilkan 1 saja tidak 22 nya
  • | => pipa menandakan hasil dari perintah sebelumnya akan di proses kembali oleh perintah selanjutnya
  • awk -F”.” {‘print $1″.”$2″.”$3″.”$4’} => menampilkan hanya column 1,2,3,4 (pemisah column adalah “.” sudah dimodifikasi dengan penambahan -F) dan diantara column 1,2,3,4 akan ada titik “.”
  • | => pipa menandakan hasil dari perintah sebelumnya akan di proses kembali oleh perintah selanjutnya
  • uniq => hasilnya di filter kembali jika ada hasil yang sama maka hanya ditampilkan 1 saja tidak 22 nya

sehingga hasil akhirnya adalah

178.89.134.36

lalu bagaimana jika saya ingin hasilnya adalah 178.89.134.0/24, rubah perintah awk terakhir setelah pipa, rubah script awknya menjadi seperti ini (awk -F”.” {‘print $1,$2,$3,”0/24″‘} | sed ‘s/ /./g’)

sehingga keseluruhan scriptnya menjadi seperti dibawah dan hasilnya juga menjadi seperti dibawah

grep 'May  4 13' /var/log/maillog | grep dewa@sekolahlinux.com | awk {'print $10'} | awk -F"]" {'print $1'} | awk -F"[" {'print $2'} | sort -n | uniq | awk -F"." {'print $1,$2,$3,"0/24"'} | sed 's/ /./g' | uniq

178.89.134.0/24

penjelasan script diatas lalu bagaimana.? oke saya hanya akan menjelaskan script yang terlah dirubah saja yaitu perintah AWK terakhir dan perinta SED setelah pipa

  • awk -F”.” {‘print $1,$2,$3,”0/24″‘} => menampilkan hanya column 1,2,3, (pemisah column adalah “.” sudah dimodifikasi dengan penambahan -F) lalu diakhir akan ditambahkan “0/24”
  • | => pipa menandakan hasil dari perintah sebelumnya akan di proses kembali oleh perintah selanjutnya
  • sed ‘s/ /./g’ => berfungsi mereplace spasi “/ /” yang ada di ip menjadi titik “./” dan “g” untuk mengulang replace jika ditemuka spasi yang lain, tanpa perintah sed ini maka hasilnya akan menjadi (178 89 134 0/24) tanpa titik dan ada spasi, maka dari itu perintah sed diperlukan untuk mereplace spasi menjadi titik “.”
  • | => pipa menandakan hasil dari perintah sebelumnya akan di proses kembali oleh perintah selanjutnya
  • uniq => hasilnya di filter kembali jika ada hasil yang sama maka hanya ditampilkan 1 saja tidak 22 nya

penambahan feature XARGS dan EXEC untuk menangani pencarian dan penghapusan dalam jumlah banyak, misal kita mau menghapus 1 juta file yang RM -RF pun tidak bisa maka kita harus menggunakan EXEC dan XARGS

# untuk mencari file email yang didalam ada keyword double-bounce@sekolahlinux.com dan di seleksi menjadi (uniq) sehingga tidak akan tampil 2 file yang sama, kemudian di hitung berapa jumlah filenya dengan (wc -l)

find . -name "/var/mail/sekolahlinux/Maildir/*" -type f -exec grep -l "double-bounce@sekolahlinux.com" {} ;|uniq|wc -l


# untuk mencari file email yang didalam ada keyword double-bounce@sekolahlinux.com dan di seleksi menjadi (uniq) sehingga tidak akan tampil 2 file yang sama, kemudian hapus filenya secara paksa dengan (rm -rf)

find . -name "/var/mail/sekolahlinux/Maildir/*" -type f -exec grep -l "double-bounce@sekolahlinux.com" {} ;|uniq|xargs rm -rf



 

oke sekira itu dulu yang bisa saya jelaskan, mungkin dari penjelasan saya yang asal2an itu bisa jadi solusi haha 😀 thnks to pak riza dan team noc yang memberikan banyak pencerahan.