Konfigurasi Teler Real-time HTTP Intrusion Detection

Kamis, 31 Desember 2020

Install dan Konfigurasi teler Real-time HTTP Intrusion Detection. Oke kali ini saya akan sharing sedikit mengenai cara install dan konfigurasi teler untuk mendeteksi threat dengan cara menganalisa log HTTP pada server.


Untuk konfigurasinya sendiri hanya akan saya jelaskan secara singkat karena tutorialnya sudah terdokumentasi dengan lengkap di halaman GitHub teler.

Install teler
Pertama, kita install dulu teler ke sistem. Agar struktur direktorinya rapi, disini saya letakkan di direktori /opt.
sudo su
cd /opt
git clone https://github.com/kitabisa/teler
cd teler
make build
mv ./bin/teler /usr/local/bin
Konfigurasi Teler
Masih di direktori /opt/teler, kita buat file konfigurasi teler. Kalian bisa liat contoh konfigurasinya disini. untuk custom log bisa lihat penjelasannya disini.

Disini saya akan contohkan konfigurasi sederhana yang saya gunakan.
sudo nano /opt/teler/linuxsec.yaml
Lalu isinya:
log_format: |
  $remote_addr - $remote_user - [$time_local] - [$geoip_city_country_name] [$host] "$request_method $request_uri $request_protocol"
  $status $body_bytes_sent "$http_referer" "$http_user_agent" [$request_body]

rules:
  threat:
    excludes:
      - "Bad IP Address"

notifications:
  telegram:
    token: "teelgram token disini"
    chat_id: "chat id disini"
alert:
  active: true
  provider: "telegram"

rules:
  threat:
    whitelists:
      - "/favicon.ico"
      - "/robots.txt"
Untuk cara membuat bot di Telegram serta cara mendapatkan token dan chat id nya kalianbisa googling sendiri.

Contoh format log yang saya gunakan silahkan kalian ganti sendiri karena log yang saya gunakan juga sudah tidak standar lagi. Lalu karena saya menggunakan notifikasi Telegram untuk reportingnya, jangan lupa edit juga di /opt/teler/internal/alert/template/telegram.tmpl apa saja yang ingin dikirim ke telegram.

Seluruh access log yang domain saya gunakan menggunakan akhiran -access.log. Maka kita coba eksekusi teler dengan perintah
tail -f /var/log/nginx/*-access.log | /usr/local/bin/teler -c /opt/teler/linuxsec.yaml
Jadi disini teler akan membaca log akses Nginx secara stream. Jika memang belum ada threat yang terdeteksi, kalian bisa coba jalankan command berikut untuk mengirim payload directory bruteforce ke teler.
curl -A "teler testing" -I https://blog.linuxsec.org/.env
Silahkan ganti sendiri domainnya.
Sekarang cek lagi apakah teler mendeteksi payload yang kita kirim.

Cek juga di Telegram apakah notifikasinya terkirim.

Oke setelah semuanya beres, kita jadikan teler sebagai service yang berjalan di backgroud. Disini saya menggunakan systemd.

Membuat Service di Systemd
Saya sudah pernah share tutorial bagaimana cara membuat service systemd. Untuk teler, kita buat satu file lagi di /opt/teler. Sebenarnya isinya cuma satu baris perintah, namun kita memerlukannya agar nantinya kita tidak perlu merubah file service systemd jika ada perubahan konfigurasi teler.
sudo nano /opt/teler/teler-exec.sh
Isinya:
#!/bin/bash
tail -f /var/log/nginx/*-access.log | /usr/local/bin/teler -c /opt/teler/linuxsec.yaml
Silahkan sesuaikan sendiri.
Lalu sekarang kita buat service systemd-nya.
sudo nano /etc/systemd/system/teler-daemon.service
Isinya:
[Unit]
Description=Teler Services
After=network.target   
StartLimitIntervalSec=0

[Service]
WorkingDirectory=/opt/teler 
ExecStart=/bin/bash teler-exec.sh
Restart=always
RuntimeMaxSec=3600
RestartSec=2 
User=root

[Install]
WantedBy=multi-user.target
Selanjutnya aktifkan service teler-daemon:
sudo systemctl daemon-reload
sudo systemctl enable teler-daemon
sudo systemctl restart teler-daemon

Mengirim data ke Prometheus

teler juga mendukung metrics memanfaatkan Prometheus. Kita tambahkan baris berikut di konfigurasi teler untuk mengaktifkannya:

prometheus:
  active: true
  host: "127.0.0.1"
  port: 9099
  endpoint: "/telermetrics"

Untuk memverifikasi apakah metrics sudah terkirim dengan benar, kalian bisa cek dengan perintah

curl localhost:9099/telermetrics

Jika Prometheus terinstall di host yang sama dengan teler, kita bisa langsung menambahkan metrics ini di Prometheus. Namun jika metrics ini akan dilempar ke Prometheus yang berada di server lain, kalian bisa me-masking nya menggunakan Nginx dengan menambahkan http auth disitu.

Contoh reverse proxy yang saya gunakan:

location /telermetrics {
    auth_basic           "Login Area";
    auth_basic_user_file /etc/nginx/auth/htpasswd;
    proxy_pass       http://localhost:9099/telermetrics;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass_request_headers on;
    proxy_redirect off;
    proxy_buffering off;
    proxy_request_buffering off;
    proxy_intercept_errors on;
  }
Sekarang kita coba cek menggunakan curl:

Nah, di file konfigurasi Prometheusnya tinggal kita tambahkan baris berikut:
  - job_name: 'linuxsec-teler'
    scrape_interval: 5s
    honor_labels: true
    static_configs:
      - targets: ['metrics.linuxsec.org']
    metrics_path: '/telermetrics'
    basic_auth:
       username: "httpuser"
       password: "httppassword"
Jika semua konfigurasinya benar, seharusnya log dari teler sekarang sudah masuk ke Prometheus.

Visualisasi ke Grafana
Setelah metrics nya masuk ke Prometheus maka kita juga bisa memvisualisasikannya ke Grafana. Tinggal tambahkan data source nya ke Grafana.

Untuk dashboardnya kalian bisa import. Kebetulan saya sudah buat simple dashboard untuk teler.
Silahkan dikembangkan sendiri.
langsung import saja file json nya ke Grafana.


Oke mungkin sekian tutorial singkat kali ini, semoga bermanfaat. Jika ada yang ingin ditanyakan silahkan tinggalkan komentar.

Artikel Terkait Security