Jika kita mempunyai server yang mempunyai ip public dan menjalankan service ssh maka kita akan sering menemukan log autentikasi failed dari port ssh seperti berikut
May 17 16:50:22 openbsd sshd[23912]: Failed none for invalid user admin from xx.xx.xx.xx port 52704 ssh2 May 17 16:50:23 openbsd sshd[23912]: Failed password for invalid user admin from xx.xx.xx.xx port 52704 ssh2 May 17 16:50:23 openbsd last message repeated 2 times May 17 16:50:23 openbsd sshd[14094]: Connection closed by xx.xx.xx.xx May 17 16:50:25 openbsd sshd[30117]: Invalid user admin from xx.xx.xx.xx May 17 16:50:25 openbsd sshd[18376]: input_userauth_request: invalid user admin May 17 16:50:25 openbsd sshd[30117]: Failed none for invalid user admin from xx.xx.xx.xx port 52705 ssh2 May 17 16:50:25 openbsd sshd[30117]: Failed password for invalid user admin from xx.xx.xx.xx port 52705 ssh2 May 17 16:50:26 openbsd last message repeated 2 times May 17 16:50:26 openbsd sshd[18376]: Connection closed by xx.xx.xx.xx
Kasus kasus seperti ini dapat diatasi dengan menggunakan firewall pf (paket filter), jika kita anda menggunakan OpenBSD maka anda tinggal mengaktifkanya saja, dan apabila anda menggunakan FreeBSD maka anda harus terlebih dahulu me load modul pf ke dalam kernel dengan perintah berikut
kldload pf
setelah mosul pf telah ter load ke dalam kernel maka kita tinggal membuat rules firewall untuk mencegat aksi brute force, pertama buat tabel baru untuk menangani bruteforce dengan nama “skiddie”
table <skiddie> persist
kemudian buat rules untuk menolak koneksi dari alamat yang terdapat pada tabel skiddie
block quick from <skiddie>
kemudian buat kebijakannya
pass in inet proto tcp from any to $ext_if port ssh flags S/SA keep state (max-src-conn 10, max-src-conn-rate 3/10, overload <skiddie> flush global)
Keterangan :
<# $OpenBSD: pf.conf,v 1.37 2008/05/09 06:04:08 reyk Exp $ # # See pf.conf(5) for syntax and examples. # Remember to set net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1 # in /etc/sysctl.conf if packets are to be forwarded between interfaces. ext_if="vr0" prot="{tcp, udp}" table <rese> persist set skip on lo set block-policy return scrub in all block in inet all pass out inet all block quick from <rese> to $ext_if pass in inet proto tcp from any to $ext_if port ssh flags S/SA keep state (max-src-conn 10, max-src-conn-rate 3/10, overload <rese> flush global)