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


Por lo general, todos usamos servicios SSH y FTP a menudo para acceder a servidores remotos y 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 consejos de seguridad para reforzar los servidores Linux
  2. 5 consejos útiles para asegurar y proteger el servidor SSH

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 funcione 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 usa 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. Guía básica sobre IPTables (Firewall de Linux) Consejos/comandos
  2. Cómo configurar un firewall Iptables para habilitar el acceso remoto a los servicios en Linux
  3. Cómo configurar "FirewallD" en RHEL/CentOS 7 y Fedora 21
  4. Reglas útiles de "FirewallD" para configurar y administrar el firewall en 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]

Por lo general, los puertos predeterminados para FTP son 20 y 21. Por lo tanto, 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 entren en vigor los nuevos cambios.

--------------- 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.