He estado tratando de armar un script básico de iptables del servidor que funcione para la mayoría de los sitios que solo ejecutan un servidor web básico usando HTTP (S) y SSH (puertos 80, 443 y 22). Después de todo, la mayoría de los VPS solo necesitan estas reglas de puertos de inicio y pueden agregar puertos de correo o juegos más tarde según sea necesario.
Hasta ahora tengo el siguiente conjunto de reglas y me preguntaba si alguien sabe de un mejor script o cualquier mejora que pueda agregarse.
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections (only 4 attempts by an IP every 3 minutes, drop the rest)
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
iptables es una de las partes más importantes de asegurar su caja (también vea fail2ban) y, sin embargo, hay muchas personas como yo que tienen problemas para comprender todo lo que implica crear un firewall básico seguro para nuestros servidores.
¿Cuál es la forma más segura de abrir solo los puertos básicos necesarios para un servidor web?
Actualización: cyberciti.biz tiene otro script de iptables que se ve bastante bien.
Además, en lugar de usar Denyhosts o fail2ban, podría usar iptables para bloquear intentos fallidos repetidos en SSH .
modprobe
no está instalado (o si hay algún otro error antes de abrir el puerto 22), se bloqueará del servidor.