Minggu ini saya dapat banyak amaran berkenaan lockdown event dari salah satu laman web wordpress yang saya uruskan. Setelah diperiksa saya dapati banyak percubaan blok rangkaian yang cuba meneka kata laluan untuk pengguna admin.

A lockdown event has occurred due to too many failed login attempts or invalid username:
Username: admin
IP Address: 185.86.164.104

A lockdown event has occurred due to too many failed login attempts or invalid username:
Username: admin
IP Address: 185.86.164.109

A lockdown event has occurred due to too many failed login attempts or invalid username:
Username: admin
IP Address: 185.86.13.213

IP Range: 185.86.13.*

Plugin Wordpress security biasanya akan blok alamat IP yang berkenaa selama 15 minit. Tetapi, aktiviti tidak berkurangan kerana bot (atau manusia?) akan menggunakan IP lain. Nampaknya tidak berapa efektif jadi saya ambil keputusan untuk guna firewall.

OpenBSD PF

Sistem operasi OpenBSD dilengkapi dengan firewall yang dinamakan PF. Setelah dikenal pasti blok IP yang berkenaan (semua dari autonomous system yang sama)

Langkah yang diambil adalah seperti berikut:

  1. Wujudkan ‘table’ dalam pf.conf
table <wp_blocklist> {185.85.239.0/24, 185.86.167.0/24, 185.86.164.0/24, 185.86.13.0/24, 185.119.81.0/24}

nota: boleh juga buat satu fail yang ada block ip di atas (contoh /etc/bot-table

  1. Wujudkan peraturan baru untuk halang ip dalam table wpblocklist
block in log on vio0 from <wp_blocklist> to any 

  1. Uji konfigurasi pf.conf, pastikan sintaksnya betul
doas pfctl -nf /etc/pf.conf 

Kalau tiada kesilapan boleh teruskan langkah seterusnya

  1. Mulakan pfctl dan baca pf.conf yang telah di edit
doas pfctl -f /etc/pf.conf 
  1. Periksa table
doas pfctl -t wp_blocklist -T show 
185.85.190.0/24
   185.85.239.0/24
   185.86.13.0/24
   185.86.164.0/24
   185.86.167.0/24
   185.119.81.0/24

  1. Log pf ada di /var/log/pflog. Perlu guna tcpdump untuk baca fail tersebut
doas tcpdump -n -e -ttt -r /var/log/pflog

Aug 30 00:24:42.436708 rule 2/(match) block in on vio0: 185.86.167.4.60123 > web_server.80: S 3930688699:3930688699(0) win 14600 <mss 1460,sackOK,timestamp 2366987 0,nop,wscale 7> (DF)
Aug 30 00:24:50.436872 rule 2/(match) block in on vio0: 185.86.167.4.60123 > web_server.80: S 3930688699:3930688699(0) win 14600 <mss 1460,sackOK,timestamp 2374987 0,nop,wscale 7> (DF)
Aug 30 03:43:21.479631 rule 2/(match) block in on vio0: 185.86.164.109.37768 > web_server.80: S 592827543:592827543(0) win 14600 <mss 1460,sackOK,timestamp 1657824 0,nop,wscale 7> (DF)
Aug 30 03:43:22.479330 rule 2/(match) block in on vio0: 185.86.164.109.37768 > web_server.80: S 592827543:592827543(0) win 14600 <mss 1460,sackOK,timestamp 1658825 0,nop,wscale 7> (DF)

atau

doas tcpdump -n -e -ttt -i pflog0 

Pada saya, dokumentasi OpenBSD sangat jelas dan mudah difahami. PF juga agak berguna untuk menepis serangan bot :-)

Boleh baca tentang OpenBSD PF di sini atau guna man pfctl dalam sistem OpenBSD anda.

Selamat mencuba!