Cara mengizinkan akses ssh/ftp berdasarkan negara menggunakan geoip

Cara mengizinkan akses ssh/ftp berdasarkan negara menggunakan geoip

Database Geoip memiliki catatan lokasi geografis berdasarkan alamat IP. Menggunakan database ini kita dapat mencari IP apa pun milik negara mana yang menggunakan baris perintah Linux. Artikel ini akan membantu Anda mengizinkan akses SSH atau FTP (VSFTPD) berdasarkan negara pengguna. Contoh ini menggunakan pembungkus TCP untuk mengamankan layanan Anda.

Instal database Geoip dan Geoip

Pertama, instal Binary Geoip untuk Linux dan basis data mereka berdasarkan sistem operasi Anda. Untuk pengguna CentOS dan RedHat, Geoip Binary dan database digabungkan dalam satu paket.

Di Centos dan Redhat:
sudo yum install geoip  
Di Ubuntu dan Debian:
sudo apt-get install geoip-bin geoip-database  

Buat skrip filter ssh/ftp

Sekarang buat skrip shell yang memeriksa semua alamat IP koneksi yang masuk dan mencari negara yang sesuai menggunakan database geoip dan hanya mengizinkan negara -negara yang kodenya didefinisikan Izin_countries variabel dalam skrip.

vim/usr/local/bin/ipfilter.SH  
#!/bin/bash # Lisensi: WTFPL # Kode negara yang dipisahkan ruang untuk menerima izin_countries = "di AS" LOGDENY_FACILIDE = "AUTHPRIV.Perhatikan "jika [$ # -ne 1]; lalu echo" penggunaan: 'Basename $ 0' "1> & 2 Exit 0 # Return true jika terjadi masalah konfigurasi FI jika [[" 'echo $ 1 | grep ': "" != ""]]; lalu 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 = "alamat ip tidak ditemukan" || $ Allow_countries = ~ $ country]] && response = "izin" || Respons = "tolak" jika ["$ response" == "izinkan"]]; Lalu Logger -p $ LOGDENY_FACILITY "$ Response SSHD Connection dari $ 1 ($ country)" Keluar 0 Logger -P $ LOGDENY_FACILITY "$ Response SSHD Connection dari $ 1 ($ country)" Keluar 1 FI 

Script srouce: https: // inti.GitHub.com/jokey2k/a74f56955124880749e7

Jadikan skrip ini dapat dieksekusi

CHMOD +X/USR/LOCAL/BIN/IPFILTER.SH  

Batasi koneksi SSH/FTP

Sekarang terapkan pembatasan SSH dan FTP menggunakan pembungkus TCP. Pertama kita perlu menyangkal semua orang dengan menambahkan baris di bawah ini /etc/host.membantah.

/etc/host.membantah:

sshd: semua vsftpd: semua 

Sekarang edit /etc/host.mengizinkan dan hanya mengizinkan IP yang diizinkan oleh skrip filter IP Anda.

/etc/host.mengizinkan:

SSHD: Semua: spawn/usr/local/bin/ipfilter.SH %A VSFTP: Semua: spawn/usr/local/bin/ipfilter.sh %a 

Di atas pembatasan FTP hanya untuk VSFTPD. Juga, pastikan Anda telah mengaktifkan (tcp_wrappers = ya) dalam konfigurasi vsftpd Anda. Anda juga dapat membuat aturan serupa untuk layanan lain yang didukung oleh pembungkus TCP.

Pengujian

Akhirnya, uji server Anda dengan login dalam menggunakan SSH atau FTP dari berbagai lokasi dan menganalisis file log akses. Di bawah ini adalah beberapa log demo yang dibuat oleh ipfilter.SH.

27 Februari 13:03:29 Tecadmin Root: DENY SSHD CONNECTION DARI 212.191.246.202 (PL) 27 Feb 13:34:28 Tecadmin Root: DENY SSHD CONNECTION DARI 212.181.246.202 (SE) 27 Feb 13:34:36 Tecadmin Root: DENY SSHD CONNECTION DARI 211.181.246.203 (KR) 27 Feb 13:35:00 Tecadmin Root: DENY SSHD CONNECTION DARI 221.191.146.204 (JP) 27 Feb 15:11:04 Tecadmin Root: Izinkan Koneksi SSHD dari 49.15.212.12 (dalam) 27 Feb 15:11:09 Tecadmin Root: Izinkan Koneksi SSHD dari 149.15.212.12 (AS) 27 Feb 15:11:22 Tecadmin Root: Izinkan Koneksi SSHD dari 49.15.156.123 (dalam) 27 Feb 15:11:32 Tecadmin Root: Izinkan Koneksi SSHD dari 231.15.156.123 (Alamat IP tidak ditemukan) 27 Feb 15:14:04 Tecadmin Root: DENY SSHD Connection dari 111.15.15.123 (CN) 27 Feb 15:14:56 Tecadmin Root: Izinkan Koneksi SSHD dari 49.15.110.123 (dalam) 

Dalam log, Anda dapat mengatakan bahwa semua IP milik AS (Amerika Serikat) dan di (India) diizinkan. Juga jika ada IP yang tidak cocok dengan database GEOIP akan diizinkan secara default. Sisa IP yang cocok dengan negara lain ditolak.