Archive

Limit Akses SSH Menggunakan GeoIp

Kali ini MinDino akan membuat tutorial cara Limit Akses SSH Menggunakan GeoIp, tentu kalian cape yah ssh nya di bruteforce trus nah ini salah satu solusi untuk mengamankan Cloud VM anda, langsung saja yah MinDino gak mau terlalu banyak basa basi karena MinDino lagi sibuk setup Colocation nih.

Database GeoIP memiliki catatan lokasi geografis berdasarkan alamat IP. Dengan menggunakan database Geoip, kita dapat mencari alamat IP apapun yang dimiliki negara manapun, menggunakan baris perintah linux. Kita dapat melakukan limitasi akses ke server tersebut menggunakan database geoip, dapat meningkatkan keamanan dari server tersebut.

Panduan ini akan membantu kalian mengizinkan akses ssh atau ftp ( akses ) berdasarkan negara pengguna untuk meningkatkan keamanan server.

Step 1. Install Database Geoip

Langsung install paket database geoip berdasarkan sistem operasi yang digunakan.

Di Centos / Redhat dapat menggunakan perintah dibawah ini.

[[email protected] ~]# yum install GeoIP -y

Di Debian / Ubuntu dapat menggunakan perintah dibawah ini.

[[email protected] ~]# apt-get install geoip-bin geoip-database

Step 2. Buat script filter SSH / FTP

Sekarang, kalian buat script sheel yang memeriksa semua alamat IP koneksi masuk dan mencari negara yang sesuai dengan database GeoIP dan hanya mengizinkan negara dengan kode ALLOW-COUNTRIES

[[email protected] ~]# nano /usr/local/bin/ipfilter.sh

Berikut isi script ya

#!/bin/bash

# UPPERCASE space-separated country codes to ACCEPT
ALLOW_COUNTRIES="IN US"
LOGDENY_FACILITY="authpriv.notice"

if [ $# -ne 1 ]; then
echo "Usage: `basename $0` " 1>&2
exit 0 # return true in case of config issue
fi

if [[ "`echo $1 | grep ':'`" != "" ]] ; then
COUNTRY=`/usr/bin/geoiplookup6 "$1" | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1`
else
COUNTRY=`/usr/bin/geoiplookup "$1" | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1`
fi
[[ $COUNTRY = "IP Address not found" || $ALLOW_COUNTRIES =~ $COUNTRY ]] && RESPONSE="ALLOW" || RESPONSE="DENY"

if [[ "$RESPONSE" == "ALLOW" ]] ; then
logger -p $LOGDENY_FACILITY "$RESPONSE sshd connection from $1 ($COUNTRY)"
exit 0
else
logger -p $LOGDENY_FACILITY "$RESPONSE sshd connection from $1 ($COUNTRY)"
exit 1
fi

Note

ALLOW_COUNTRIES= pada script ini merupakan negara yang di izinkan untuk mengakses ssh / ftp.
ID sedangkan ini, merupakan kode dari negara Indonesia.

Step 3. Eksekusi Script tersebut.

Menggunakan perintah ini, untuk menjalankan script tersebut.

[[email protected] ~]# chmod +x /usr/local/bin/ipfilter.sh

Step 4. Disable akses ssh all

Lakukan disable akses ssh di hosts.deny untuk melakukan drop koneksi, jika ada yang melakukan percobaan akses.

[[email protected] ~]# nano /etc/hosts.deny

sshd: ALL
vsftpd: ALL

Step 5. Host allow

Tambahkan script filter akses ssh / ftp yang sudah ditambahkan pada file hosts.allow untuk mengizinkan akses ssh atau ftp dari negara yang sudah ditentukan.

[[email protected] ~]# nano /etc/hosts.allow

sshd: ALL: spawn /usr/local/bin/ipfilter.sh %a
vsftp: ALL: spawn /usr/local/bin/ipfilter.sh %a

Step 6. Pengetesan

Dapat melihat pada logs akses ssh, seperti dibawah ini.

[[email protected] log]# more secure | grep DENY
Mar 14 22:47:05 dns root: DENY sshd connection from 61.177.173.3 (CN)
Mar 14 22:47:07 dns root: DENY sshd connection from 218.92.0.171 (CN)
Mar 14 22:47:08 dns root: DENY sshd connection from 221.181.185.150 (CN)
Mar 14 22:47:19 dns root: DENY sshd connection from 221.181.185.150 (CN)
Mar 14 22:47:31 dns root: DENY sshd connection from 221.181.185.150 (CN)
Mar 14 22:47:38 dns root: DENY sshd connection from 218.92.0.171 (CN)
Mar 14 22:47:43 dns root: DENY sshd connection from 221.181.185.150 (CN)
Mar 14 22:47:57 dns root: DENY sshd connection from 221.181.185.150 (CN)
Mar 14 22:48:16 dns root: DENY sshd connection from 218.92.0.171 (CN)
Mar 14 22:48:17 dns root: DENY sshd connection from 178.128.55.198 (GR)
Mar 14 22:48:17 dns root: DENY sshd connection from 155.94.179.135 (US)
Mar 14 22:48:18 dns root: DENY sshd connection from 61.177.173.3 (CN)
Mar 14 22:48:19 dns root: DENY sshd connection from 103.248.31.50 (IN)
Mar 14 22:48:26 dns root: DENY sshd connection from 65.191.76.227 (US)
Mar 14 22:49:02 dns root: DENY sshd connection from 165.227.46.89 (CA)
Mar 14 22:49:10 dns root: DENY sshd connection from 61.177.173.3 (CN)
Mar 14 22:49:17 dns root: DENY sshd connection from 103.100.210.198 (HK)
Mar 14 22:49:23 dns root: DENY sshd connection from 113.105.131.153 (CN)
Mar 14 22:49:35 dns root: DENY sshd connection from 155.94.179.135 (US)
Mar 14 22:49:58 dns root: DENY sshd connection from 178.128.55.198 (GR)
Mar 14 22:50:12 dns root: DENY sshd connection from 61.177.173.3 (CN)
Mar 14 22:50:40 dns root: DENY sshd connection from 37.59.37.116 (FR)
Mar 14 22:50:54 dns root: DENY sshd connection from 155.94.179.135 (US)
Mar 14 22:51:05 dns root: DENY sshd connection from 5.188.62.240 (RU)
Mar 14 22:51:17 dns root: DENY sshd connection from 61.177.173.3 (CN)
Mar 14 22:51:26 dns root: DENY sshd connection from 65.191.76.227 (US)
Mar 14 22:51:39 dns root: DENY sshd connection from 178.128.55.198 (GR)
Mar 14 22:51:46 dns root: DENY sshd connection from 165.227.46.89 (CA)
Mar 14 22:51:52 dns root: DENY sshd connection from 103.100.210.198 (HK)
Mar 14 22:52:15 dns root: DENY sshd connection from 155.94.179.135 (US)
Mar 14 22:52:25 dns root: DENY sshd connection from 61.177.173.3 (CN)
Mar 14 22:52:35 dns root: DENY sshd connection from 113.105.131.153 (CN)
Mar 14 22:53:25 dns root: DENY sshd connection from 178.128.55.198 (GR)
Mar 14 22:53:26 dns root: DENY sshd connection from 61.177.173.3 (CN)

Demikian lah cara Limit Akses SSH menggunakan GeoIp mudah2an bermanfaat.