Analisis Log Nginx Dengan Pandas & NumPy Untuk Deteksi Serangan
Pendahuluan
File log web server seperti Nginx menyimpan ribuan data kunjungan yang sangat berharga. Namun, saat terjadi serangan, membaca file log berukuran gigabyte secara manual sangatlah mustahil. Artikel ini membahas cara melakukan parsing log menggunakan pustaka Python **Pandas** dan **NumPy** untuk menganalisis pola akses mencurigakan.
Mengimpor Log ke Pandas
File log Nginx umumnya berformat Common Log Format (CLF). Kita dapat membaca log ini menggunakan regex di Pandas:
pythonimport pandas as pd
log_pattern = r'([^ ]*) ([^ ]*) ([^ ]*) \[(.*?)\] "([^ ]*) (.*?) (.*?)" ([0-9]*) ([0-9]*)' data = []
with open("access.log", "r") as f: for line in f: match = re.match(log_pattern, line) if match: data.append(match.groups())
df = pd.DataFrame(data, columns=['ip', 'client', 'user', 'datetime', 'method', 'request', 'protocol', 'status', 'size'])
print(df.head())
Deteksi Serangan Brute Force & Scanning
Setelah log diubah ke format DataFrame, kita dapat dengan mudah menyaring IP yang melakukan request halaman error 404 atau login gagal secara berlebihan:
python# Deteksi IP yang mengakses halaman 404 lebih dari 50 kali errors = df[df['status'] == '404'] attacker_ips = errors['ip'].value_counts()
print("IP Mencurigakan (Banyak request 404):")
print(suspicious_ips)
Dengan mengotomatisasi skrip ini di server Homelab, kita bisa langsung mengirimkan IP mencurigakan ke **Fail2ban** atau memblokirnya langsung melalui firewall MikroTik.