Tengo un servidor dedicado en el que instalé un servidor Ubuntu 22.04.1 LTS con una dirección IP pública. Quiero bloquear el puerto ssh para permitir solo el paso de direcciones IP específicas.
Tengo 3 direcciones IP del trabajo y la red que configuré en el servidor con un rango de IP.
¿Cómo haría para permitir que solo estas direcciones IP inicien sesión en mi servidor?
Encontré esto en otra publicación:
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j REJECT
¿Funcionaría esto si lo ejecutara para cada dirección IP o habría complicaciones?
Además, ¿es esto suficiente? ¿Debería bloquear otros puertos? Esta es una instalación nueva que solo contiene postgresql. Estoy intentando aprender más sobre Ubuntu y postgresql pero no quiero que mi servidor sea un objetivo.
¡Gracias por tu contribución!
Respuesta1
Le sugeriría que ajuste su enfoque desde el enfoque en un solo puerto a una postura de "defensa" completa: incluya IP en la lista blanca, rechace todos los demás intentos de conexión. Esto se aplica a la mayoría de los puertos de su entorno, porque de lo contrario tendrá que incluirlos en la lista negra.cadaSe sabe que existe una IP que realiza escaneo de servicios, por lo que tendrás una lista increíblemente larga en su lugar. Los escáneres de servicio buscancadapuerto, por lo que debería adoptar ante todo un enfoque de "denegación de confianza". Cosas como un servidor web (el puerto 80, 443 para HTTP/HTTPS puede necesitar un acceso más amplio que IP específicas si es un sitio público) también se escanean, pero se pueden "proteger" fortaleciendo adecuadamente el servidor web y el contenido. Sin embargo,todolos puertos son escaneados por escáneres de servicio, ytodoLos dispositivos conectados a Internet están sujetos a análisis, por lo que negarlo todo para empezar es el mejor enfoque.
Como tal, el enfoque más eficaz para la "denegación de confianza" es simplemente permitir que ciertas IP se conecten a los puertos y a todos los demás servicios de la máquina, y luego rechazar todos los demás intentos de conexión. Al mismo tiempo que permite que localhost se comunique consigo mismo, lo cual está bien.
Comience protegiendo todo con listas blancas antes de abrir otros puertos. Si necesita más servicios, podemos configurar reglas PERMITIR adicionales para el tráfico HTTP desde cualquier lugar, etc.
# Allow localhost traffic
iptables -A INPUT -i lo -j ACCEPT
# INVALID type packets should be DROPped regardless of source.
iptables -A INPUT -m state --state INVALID -j DROP
# Allow traffic for related/established connections already running
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Allow all new connections/traffic from the local subnet you're on
# (10.20.30.0/24 is used in example)
iptables -A INPUT -m state --state NEW -s 10.20.30.0/24 -j ACCEPT
# Whitelist your IPs - repeat this step for each of your IPs permitted
# to access the machine outside of local network
iptables -A INPUT -s IPADDRESS -m state --state NEW -j ACCEPT
# If you have other services you want to configure for *public* access, then
# use this rule as a template and execute this before you follow the last step.
#
# Change PROTO to the protocol (tcp/udp, etc.) and PORT to the port number
# (80 for HTTP, ex.)
#
# Add this to the end of the rule if you want to allow only certain
# IPs to the specified service:
# -s IPADDRESS
iptables -A INPUT -p PROTO --dport PORT -m state --state NEW -j ACCEPT
# Deny all other traffic
iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable
Esto se basa en mi experiencia con servidores durante casi 15 años y en mi formación en seguridad de redes. Así como mis conocimientos como Profesional de Seguridad TI.