Cómo bloquear el acceso SSH y FTP a IP y rango de red específicos en Linux


Por lo general, todos usamos los servicios SSH y FTP a menudo para acceder a los servidores remotos y a los servidores privados virtuales. Como administrador de Linux, debe saber cómo bloquear el acceso SSH y FTP a una IP específica o un rango de red en Linux para reforzar la seguridad.

  1. 25 Hardening Security Tips for Linux Servers
  2. 5 Useful Tips to Secure and Protect SSH Server

Este tutorial le mostrará cómo bloquear el acceso SSH y FTP a una dirección IP particular y/o un rango de red en el servidor CentOS 6 y 7. Esta guía se probó en las versiones CentOS 6.xy 7.x, pero probablemente funcionará en otras distribuciones de Linux como Debian, Ubuntu y SUSE/openSUSE, etc.

Lo haremos de dos formas. El primer método es usar IPTables/firewallD y el segundo método es usar envoltorios TCP con la ayuda del archivo hosts.allow y hosts.deny.

Consulte las siguientes guías para saber más sobre IPTables y Firewalld.

  1. Basic Guide on IPTables (Linux Firewall) Tips / Commands
  2. How To Setup an Iptables Firewall to Enable Remote Access to Services in Linux
  3. How to Configure ‘FirewallD’ in RHEL/CentOS 7 and Fedora 21
  4. Useful ‘FirewallD’ Rules to Configure and Manage Firewall in Linux

Ahora sabe qué es IPTables y FirewallD y sus conceptos básicos.

Método 1: bloquear el acceso a SSH y FTP mediante IPTables / FirewallD

Ahora veamos cómo bloquear el acceso SSH y FTP a una IP específica (por ejemplo 192.168.1.100) y/o rango de red (por ejemplo 192.168.1.0/24) usando IPtables en versiones RHEL/CentOS/Scientific Linux 6.xy FirewallD en CentOS 7.x.

--------------------- On IPtables Firewall ---------------------
# iptables -I INPUT -s 192.168.1.100 -p tcp --dport ssh -j REJECT
# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport ssh -j REJECT
--------------------- On FirewallD ---------------------
# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100 -p tcp --dport 22 -j REJECT
# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100/24 -p tcp --dport 22 -j REJECT

Para que las nuevas reglas entren en vigor, debe utilizar el siguiente comando.

# service iptables save         [On IPtables Firewall]
# firewall-cmd --reload         [On FirewallD]

Ahora, intente SSH al servidor desde el host bloqueado. Tenga en cuenta que aquí 192.168.1.150 es el host bloqueado.

# ssh 192.168.1.150

Debería ver el siguiente mensaje.

ssh: connect to host 192.168.1.150 port 22: Connection refused

Para desbloquear o habilitar el acceso SSH, vaya al servidor remoto y ejecute el siguiente comando:

--------------------- On IPtables Firewall ---------------------
# iptables -I INPUT -s 192.168.1.100 -p tcp --dport ssh -j ACCEPT
# iptables -I INPUT -s 192.168.1.100/24 -p tcp --dport ssh -j ACCEPT
--------------------- On FirewallD ---------------------
# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100 -p tcp --dport 22 -j ACCEPT
# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100/24 -p tcp --dport 22 -j ACCEPT

Guarde los cambios utilizando lo siguiente para acceder a su servidor a través de SSH.

# service iptables save         [On IPtables Firewall]
# firewall-cmd --reload         [On FirewallD]

Normalmente, los puertos predeterminados para FTP son 20 y 21. Entonces, para bloquear todo el tráfico FTP usando IPTables, ejecute el siguiente comando:

--------------------- On IPtables Firewall ---------------------
# iptables -I INPUT -s 192.168.1.100 -p tcp --dport 20,21 -j REJECT
# iptables -I INPUT -s 192.168.1.100/24 -p tcp --dport 20,21 -j REJECT
--------------------- On FirewallD ---------------------
# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100 -p tcp --dport 20,21 -j REJECT
# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100/24 -p tcp --dport 20,21 -j REJECT

Para que las nuevas reglas entren en vigor, debe utilizar el siguiente comando.

# service iptables save         [On IPtables Firewall]
# firewall-cmd --reload         [On FirewallD]

Ahora, intente acceder al servidor desde el host bloqueado (192.168.1.100), con el comando:

# ftp 192.168.1.150

Recibirá un mensaje de error como el siguiente.

ftp: connect: Connection refused

Para desbloquear y volver a habilitar el acceso FTP, ejecute:

--------------------- On IPtables Firewall ---------------------
# iptables -I INPUT -s 192.168.1.100 -p tcp --dport 20,21 -j ACCEPT
# iptables -I INPUT -s 192.168.1.100/24 -p tcp --dport 20,21 -j ACCEPT
--------------------- On FirewallD ---------------------
# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100 -p tcp --dport 20,21 -j ACCEPT
# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -m tcp --source 192.168.1.100/24 -p tcp --dport 20,21 -j ACCEPT

Guarde los cambios con el comando:

# service iptables save         [On IPtables Firewall]
# firewall-cmd --reload         [On FirewallD]

Ahora, intente acceder al servidor a través de FTP:

# ftp 192.168.1.150

Ingrese su nombre de usuario y contraseña de ftp.

Connected to 192.168.1.150.
220 Welcome to TecMint FTP service.
Name (192.168.1.150:sk): tecmint
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

Método 2: bloquear el acceso a SSH y FTP mediante envoltorios TCP

Si no quiere meterse con IPTables o FirewallD, entonces los envoltorios TCP son la mejor manera de bloquear el acceso SSH y FTP a una IP específica y/o un rango de red.

OpenSSH y FTP se compilan con compatibilidad con envoltorios TCP, lo que significa que puede especificar qué hosts pueden conectarse sin tocar su firewall en los siguientes dos archivos importantes y son:

  1. /etc/hosts.allow
  2. /etc/hosts.deny

Como su nombre lo indica, el primer archivo contiene entradas de hosts permitidos y el segundo contiene direcciones de hosts bloqueados.

Por ejemplo, bloqueemos el acceso SSH y FTP al host que tiene una dirección IP 192.168.1.100 y un rango de red 192.168.1.0. Este método es el mismo para las series CentOS 6.xy 7.x. Y, por supuesto, funcionará en otras distribuciones como Debian, Ubuntu, SUSE, openSUSE, etc.

Abra el archivo /etc/hosts.deny y agregue las siguientes direcciones IP o rango de red que desea bloquear como se muestra a continuación.

##### To block SSH Access #####
sshd: 192.168.1.100
sshd: 192.168.1.0/255.255.255.0

##### To block FTP Access #####
vsftpd: 192.168.1.100
vsftpd: 192.168.1.0/255.255.255.0

Guardar y salir del archivo.

Ahora, reinicie el servicio sshd y vsftpd para que los nuevos cambios surtan efecto.

--------------- For SSH Service ---------------
# service sshd restart        [On SysVinit]
# systemctl restart sshd      [On SystemD]
--------------- For FTP Service ---------------
# service vsftpd restart        [On SysVinit]
# systemctl restart vsftpd      [On SystemD]

Ahora, intente SSH del servidor o desde un host bloqueado.

# ssh 192.168.1.150

Verá el siguiente resultado:

ssh_exchange_identification: read: Connection reset by peer

Ahora, intente enviar un FTP al servidor o desde un host bloqueado.

# ftp 192.168.1.150

Verá el siguiente resultado:

Connected to 192.168.1.150.
421 Service not available.

Para desbloquear o habilitar los servicios SSH y FTP nuevamente, edite el archivo hosts.deny y comente todas las líneas y finalmente reinicie los servicios vsftpd y sshd.

Conclusión

Eso es todo por ahora. En resumen, hoy aprendimos cómo bloquear una dirección IP y un rango de red específicos usando IPTables, FirewallD y envoltorios TCP. Estos métodos son bastante sencillos y directos.

Incluso, un administrador de Linux novato puede hacer esto en un par de minutos. Si conoce otras formas de bloquear el acceso SSH y FTP, no dude en compartirlas en la sección de comentarios. Y no olvide compartir nuestros artículos en todas sus redes sociales.