محدود کردن اجازه دسترسی به SSH/FTP توسط GeoIP به یک کشور

محدود کردن اجازه دسترسی به SSH/FTP توسط GeoIP به یک کشور

اجازه دسترسی به SSH/FTP توسط GeoIP به یک کشور

 

GeoIP دیتابیس کاملی از ip کشورهای مختلف را به صورت گرافیکال در اختیار دارد.توسط این دیتابیس ما می توانیم سرچ کنیم که کدامین ip ها دسترسی کامند لاین لینوکسی دارند.توسط این مقاله شما می توانید سرویس های ssh و ftp سرور خود را به کاربران کشور خود و یا هر کشور موردنظر دیگر تغییر دهید.در این روش از TCP wrappers برای امن کردن سرویس ها و محدود کردن اجازه دسترسی به SSH/FTP توسط GeoIP استفاده می شود.

 

1-نصب GeoIP و GeoIP database بر روی سرور :

 

برای نصب GeoIP binary و GeoIp database باید با توجه به نوع سیستم عامل خود اقدام نمایید, ولی برای centos و redhat هر دو در یک پکیج قابل نصب هستند

 

برای نصب GeoIp بر روی centos از دستور زیر استفاده می کنیم :

yum install GeoIP

و برای نصب بر روی ubuntu و debian از دستور زیر استفاده نمایید

sudo apt-get install geoip-bin geoip-database

2-ساخت اسکریپت فیلتر کننده SSH/FTP :

حال توسط اسکریپت زیر و با توجه به دیتابیس GeoIp دسترسی کشورهای غیر مجاز و تعیین نشده در بلاک ALLOW_COUNTRIES را به SSH/Ftp محدو می کنیم

vim /usr/local/bin/ipfilter.sh

حال مقادیر زیر را در فایل اسکریپت بالا قرار می دهیم

#!/bin/bash
# License: WTFPL

# 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

توسط دستور زیر اقدام به تغییر پرمیژن اسکریپت مربوطه کرده و انرا اجرایی میکنیم

chmod +x /usr/local/bin/ipfilter.sh

3-محدود سازی کانکشن های SSH/FTP :

حال توسط TCP wrappers اقدام به محدود سازی دسترسی به ssh/ftp با اضافه کردن کد زیر در فایل etc/hosts.deny/ می کنیم

sshd: ALL
vsftpd: ALL

توسط کد بالا تمامی دسترسی ها به سرویس ssh و ftp بسته شده است, حالا با ادیت کردن فایل etc/hosts.allow/ اقدام به دادن دسترسی به Ip های موردنظر که در اسکریپت درج کردیم می کنیم

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

خطوط بالا برای اجازه دسترسی به سرویس vsftpd می باشند.برای اطمینان از عملکرد باید (tcp_wrappers=YES) در فایل کانفیگ vsftpd حتما فعال باشد.همچنین می توانید با توجه به کد بالا به صورت مشابه نسبت به فیلتر کردن سرویس های دیگر و قابل ساپورت توسط TCP wrapper اقدام نمایید.

4-تست

در این مرحله اقدام به تست سرور و دسترسی به دو سرویس ssh و ftp از طریق دو لوکیشن متفاوت میکنیم و لاگ ها را مشاهده می نماییم

Feb 27 13:03:29 TecAdmin root: DENY sshd connection from 212.191.246.202 (PL)
Feb 27 13:34:28 TecAdmin root: DENY sshd connection from 212.181.246.202 (SE)
Feb 27 13:34:36 TecAdmin root: DENY sshd connection from 211.181.246.203 (KR)
Feb 27 13:35:00 TecAdmin root: DENY sshd connection from 221.191.146.204 (JP)
Feb 27 15:11:04 TecAdmin root: ALLOW sshd connection from 49.15.212.12 (IN)
Feb 27 15:11:09 TecAdmin root: ALLOW sshd connection from 149.15.212.12 (US)
Feb 27 15:11:22 TecAdmin root: ALLOW sshd connection from 49.15.156.123 (IN)
Feb 27 15:11:32 TecAdmin root: ALLOW sshd connection from 231.15.156.123 (IP Address not found)
Feb 27 15:14:04 TecAdmin root: DENY sshd connection from 111.15.15.123 (CN)
Feb 27 15:14:56 TecAdmin root: ALLOW sshd connection from 49.15.110.123 (IN)

در لاگ فایل بالا دسترسی برای دو کشور US و IN باز می باشد چنانچه Ip ای در دیتابیس GeoIp نباشد اجازه دسترسی به SSH/FTP توسط GeoIP برای ان به صورت دیفالت باز می گردد.

09123781949