Estoy instalando un nuevo servidor centos 5.4 y me gustaría tener un conjunto de reglas limpias para que mu iptables se inicie.
¿Cuáles serían las buenas reglas para comenzar?
¿Es este un buen punto de partida?
# Allow outgoing traffic and disallow any passthroughs
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Allow traffic already established to continue
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow ssh, ftp and web services
iptables -A INPUT -p tcp --dport ssh -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport ftp -i eth0 -j ACCEPT
iptables -A INPUT -p udp --dport ftp -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport ftp-data -i eth0 -j ACCEPT
iptables -A INPUT -p udp --dport ftp-data -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT
# Allow local loopback services
iptables -A INPUT -i lo -j ACCEPT
# Allow pings
iptables -I INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -I INPUT -p icmp --icmp-type source-quench -j ACCEPT
iptables -I INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
Para qué es esta regla:
iptables -A INPUT -p tcp --dport domain -i eth0 -j ACCEPT
ACTUALIZACIÓN
Será un servidor web con FTP (requerido), apache, SSH, mysql.
Respuestas:
Sus reglas de IPTables parecen ser principalmente apropiadas para su servidor. Pero sugeriría un par de posibles cambios:
A menos que necesite permitir el acceso SSH, MySQL y FTP desde todo Internet, sería mucho más seguro usar la opción '--source' para restringir el acceso a esos puertos solo desde ciertas direcciones IP aprobadas. Por ejemplo, para permitir solo el acceso SSH desde la dirección IP 71.82.93.101, cambiaría la quinta regla a 'iptables -A INPUT -p tcp --dport ssh --source 71.82.93.101 -i eth0 -j ACCEPT'. Probablemente necesitará agregar una regla por separado para cada dirección IP individual que desee permitir, consulte esta pregunta para obtener más información al respecto: IP de múltiples fuentes de iptables .
A menos que esta máquina esté ejecutando un servidor DNS, probablemente desee bloquear el acceso al puerto 'dominio' (53). Para hacer esto, simplemente elimine la línea 'iptables -A INPUT -p tcp --dport domain -i eth0 -j ACCEPT'. (Esto también debería responder a su pregunta final, por cierto). Sin embargo, si realmente está ejecutando un servidor DNS, deje esta regla en su lugar.
Si necesita permitir el acceso remoto del cliente MySQL a través de la red, deberá agregar la línea 'iptables -A INPUT -p tcp --dport 3306 -i eth0 -j ACCEPT' para abrir el acceso externo al puerto estándar MySQL . Pero NO haga esto a menos que sea realmente necesario: si solo necesita acceso local a MySQL (por ejemplo, para una aplicación PHP que se ejecuta bajo Apache), no necesita proporcionar acceso remoto a MySQL. Y, a menos que quiera arriesgarse a ser pirateado, si abre el puerto 3306 a la red, asegúrese de requerir contraseñas seguras para todas las cuentas de usuario de MySQL y que sus paquetes de servidor MySQL estén actualizados.
Uno de sus comentarios ('Permitir ssh, dns, ldap, ftp y servicios web') menciona servicios LDAP, pero no existe tal regla en su configuración. Esto me sucede mucho cuando copio una configuración de ejemplo y la modifico. No afectará la función, pero corregiría el comentario, ya que los comentarios engañosos pueden causar indirectamente al confundirlo a usted u otro administrador en el futuro.
En mi experiencia, es difícil encontrar un conjunto perfecto de reglas de IPTables, pero creo que definitivamente estás en el camino correcto. Además, buena suerte al aprender más sobre IPTables: estas reglas pueden parecer complejas al principio, pero es una habilidad muy útil para cualquier administrador de sistemas Linux.
fuente
Definitivamente, busca restringir tu tráfico saliente también.
He visto muchos casos en los que las vulnerabilidades de PHP provocan que alguien use 'curl' o 'wget' para obtener código malicioso de otro lugar, luego lo ejecuta en su servidor para unirse a una botnet.
Si no espera que Apache (como ejemplo) necesite hablar con otros sitios web, restrinja el tráfico y ahórrese un poco de dolor en el futuro.
fuente
Estas reglas están listas para importarse mediante "iptables-restore":
Y solo para el registro ... estas políticas predeterminadas también deben establecerse, SI no se usa el iptables-restore anterior:
fuente
¿Por qué permiten ftp y dns? ¿Su servidor proporciona esos servicios? FTP no debería usarse realmente, excepto para algunos casos de uso muy específicos, use SFTP en su lugar (no FTPS). Además, ¿por qué especificar todos los demás puertos con nombres simbólicos y http con el número 80? ¿Acabas de copiar esto de otro lado? No copiar y aconsejar va a compensar la falta de comprensión. Asegúrese de comprender TCP, IP, firewalls y los protocolos de los servicios que proporcionará.
fuente