Este artículo describe cómo proteger el acceso SSH a su servidor realizando las siguientes acciones:
- Evitar intentos de inicio de sesión para direcciones IP específicas en la configuración permisiva
- Permitir el acceso a direcciones IP específicas en la configuración restrictiva
Configuración permisiva
La configuración permisiva permite el acceso a todos excepto a la dirección IP denegada. Puede denegar el acceso a direcciones IP específicas de las siguientes maneras:
envolturas TCP
Realice esta configuración en el archivo /etc/hosts.deny agregando la siguiente regla:
# vi /etc/host.deny
Establezca una regla de denegación de una de las siguientes maneras:
sshd: Bad_IP_address
sshd: 192.168.0.8
sshd: Bad_Segment/CIDR
sshd: 192.168.0.0/24
sshd: Bad_IP_address, Bad_IP_address
sshd: 192.168.0.3, 192.168.0.4
iptables
Esta configuración reside en la configuración de las reglas del cortafuegos del sistema operativo.
# iptables -A INPUT -s "BAD_IP" -p tcp --dport SSH_Port -j DROP
Bloquear una dirección IP :
# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j DROP
Bloquear un segmento :
# iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j DROP
Configuración restrictiva
Esta configuración permite el acceso solo a direcciones IP específicas y descarta otro tráfico entrante.
Envoltorios TCP
Primero, deniegue todo el tráfico entrante a SSH en /etc/hosts.deny archivo:
# vi /etc/hosts.deny
sshd: ALL
Luego, permita el acceso a direcciones IP de confianza:
# vi /etc/hosts.allow
sshd: Trusted_IP_address
sshd: 192.168.0.8
sshd: Trusted_Segment/CIDR
sshd: 192.168.0.0/24
sshd: Trusted_IP_address, Trusted_IP_address
sshd: 192.168.0.3, 192.168.0.4
iptables
Para las tablas de IP, el orden en que coloca las reglas es muy importante. Es por eso que debe configurar primero las reglas de autorización y luego la regla de denegación.
# iptables -A INPUT --source Trusted_IP -p tcp --dport SSH_PORT -j ACCEPT
Aceptar tráfico desde una IP:
# iptables -A INPUT --source 192.168.0.8 -p tcp --dport 22 -j ACCEPT
Aceptar tráfico de un segmento:
# iptables -A INPUT --source 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
Configuración de la regla de bloqueo:
iptables -A INPUT -p tcp --dport 22 -j DROP
Cómo mejorar los cambios
Puede revisar sus cambios ejecutando los siguientes comandos según la configuración restrictiva o permisiva:
# cat /etc/hosts.deny
# cat /etc/hosts.allow
# iptables -L
Configure ufw para denegar IP, número de puerto y protocolo específicos
Para bloquear una dirección IP al puerto TCP 22:
# ufw deny proto tcp from 192.168.0.8 to any port 22
Para bloquear una subred:
# ufw deny proto tcp from 192.168.0.0/24 to any port 22
Para listar las reglas configuradas:
# ufw status numbered
Configure firewalld para denegar una dirección IP, un número de puerto y un protocolo específicos
En firewalld, puede prohibir una dirección IP o un segmento, pero no permitirá ningún tipo de conexión:
Bloquear una dirección IP:
# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.0.8' reject"
Bloquear un segmento:
# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.0.0/24' reject"
Es por eso que puede optar por incluir en la lista blanca las direcciones IP de confianza para conectarse al puerto SSH:
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.20" port protocol="tcp" port="22" accept'
Tienes que recargar la configuración de firewalld:
# firewall-cmd --reload
Enumere las reglas configuradas en el cortafuegos:
# firewall-cmd --list-all