jueves, 2 de abril de 2015

Cómo permitir acceso SSH / FTP basado en el país utilizando GeoIP


Base de datos GeoIP tiene los registros de ubicación geográfica basados ​​en la dirección IP. El uso de esta base de datos podemos buscar cualquier ip pertenece a cada país utilizando la línea de comandos de Linux. Este artículo le ayudará a usted para permitir SSH o FTP (vsftpd) de acceso basado en usuarios país. Este ejemplo utiliza TCP wrappers para asegurar sus servicios.

Instale GeoIP y GeoIP Database

Primero instale binario GeoIP para Linux y su base de datos basado en el sistema operativo.Para CentOS y RedHat binario usuarios GeoIP y base de datos se combinan en un solo paquete.
En CentOS y Red Hat:
 # yum install GeoIP
En Ubuntu y Debian:
 $ sudo apt-get install geoip-bin geoip-database

Cree el filtro de secuencias de comandos SSH / FTP

Ahora crea un shell script que comprueba todas las direcciones de conexión IP entrantes y buscar su correspondiente país, utilizando la base de datos GeoIP y sólo permiten a los países que se define en la variable código ALLOW_COUNTRIES en escritura.
# 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 
Script srouce: https://gist.github.com/jokey2k/a74f56955124880749e7
Haga este script ejecutable
 # chmod + x /usr/local/bin/ipfilter.sh

Restringir SSH / Conexiones FTP

Ahora aplique SSH y FTP restricciones utilizando TCP wrappers. Primero tenemos que negar todos añadiendo debajo de la línea en /etc/hosts.deny.
 sshd: ALL
 vsftpd: ALL
Ahora edita /etc/hosts.allow y permitir sólo aquellas ips que está permitido por su guión de filtro IP.
 sshd: ALL: desovar /usr/local/bin/ipfilter.sh% un
 vsftp: ALL: desovar /usr/local/bin/ipfilter.sh% un
Por encima de FTP restricciones son sólo para vsftpd. También asegúrese de que ha habilitado (tcp_wrappers = YES) en la configuración de vsftpd. También puede crear reglas similares para otros servicios soportados envoltura TCP.

Pruebas

Finalmente probar el servidor de inicio de sesión mediante SSH o FTP desde diferentes 2-locations y analizar el archivo de registro de acceso. A continuación se muestra los unos troncos de demostración creados por ipfilter.sh.
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) 
En los registros se puede decir que todas las ips pertenece a los US (Estados Unidos) y IN (India) están permitidos. Además, si cualquier ip no coincidencias en la base de datos GeoIP se permitirá de forma predeterminada. Resto del reconocimiento de otros ips países se les niega.
Fuente: http://tecadmin.net/allow-server-access-based-on-country/

1 comentario: