Buenas iptables que comienzan las reglas para un servidor web?

Estoy instalando un servidor centos 5.4 nuevo y me gustaría tener un conjunto de reglas limpias para iptables mu para el arranque.

¿Cuáles serían las buenas reglas para empezar?

¿Es 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 

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

4 Solutions collect form web for “Buenas iptables que comienzan las reglas para un servidor web?”

Sus reglas IPTables parecen ser más apropiadas para su servidor. Pero yo sugeriría un par de cambios posibles:

  • A menos que usted necesite permitir el acceso de SSH, de MySQL, y del ftp del Internet entero, sería mucho más seguro utilizar la opción '–source' para restringir el acceso en esos puertos de ciertas direcciones IP aprobadas solamente. Por ejemplo, para permitir sólo 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'. Es probable que necesite agregar una regla independiente para cada dirección IP individual que desee permitir, consulte esta pregunta para obtener más información sobre esto: iptables IPs múltiples de origen .

  • A menos que esta máquina esté ejecutando un servidor DNS, probablemente desee bloquear el acceso al puerto 'dominio' (53). Para ello, basta con eliminar la línea 'iptables -A INPUT -p tcp –dport domain -i eth0 -j ACCEPT'. (Esto también debe responder a su pregunta final, BTW.) Si en realidad está ejecutando un servidor DNS, sin embargo, dejar esta regla en su lugar.

  • Si necesita permitir acceso remoto de 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 de MySQL . Pero NO lo hagas a menos que sea realmente necesario – si solo necesitas acceso local a MySQL (para una aplicación PHP que se ejecuta bajo Apache, por ejemplo), no necesitas proporcionar acceso remoto a MySQL. Y a menos que desee arriesgarse a ser hackeado, si abre el puerto 3306 a la red, asegúrese de que necesita 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 los servicios LDAP, pero no hay tal regla en su configuración. Esto me sucede mucho cuando copio una configuración de ejemplo y la modifico. No afectará a la función, pero me gustaría fijar el comentario, ya que los comentarios engañosos pueden causar indirectamente por confundir a usted u otro administrador en el futuro.

En mi experiencia, es difícil llegar a un conjunto perfecto de reglas IPTables, pero creo que definitivamente estás en el camino correcto. Además, buena suerte con aprender más sobre IPTables – estas reglas pueden parecer complejas al principio, pero es una habilidad muy útil para cualquier sysadmin de Linux.

Definitivamente busque restringir su tráfico de salida también.

He visto un montón de casos en los que PHP exploits resultan en alguien que usa 'curl' o 'wget' para buscar código malicioso desde otro lugar, luego ejecutarlo en su servidor para unirse a una botnet.

Si no espera que Apache (por ejemplo) necesite hablar con otros sitios web, restrinja el tráfico y ahorre un poco de dolor en la línea!

Estas reglas están listas para ser importadas a través de "iptables-restore":

 *filter :INPUT DROP [20:2036] :FORWARD DROP [0:0] :OUTPUT ACCEPT [93:16260] -A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT -m comment --comment "allow ICMP: echo-reply" -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -m comment --comment "allow ICMP: echo-request" -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT -m comment --comment "allow ICMP: destination-unreachable" -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT -m comment --comment "allow ICMP: source-quench" -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT -m comment --comment "allow ICMP: time-exceeded" -A INPUT -i lo -j ACCEPT -m comment --comment "allow input from the loop-back adapter" -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT -m comment --comment "allow SSH: ssh" -A INPUT -i eth0 -p tcp -m tcp --dport 53 -j ACCEPT -m comment --comment "allow DNS: domain" -A INPUT -i eth0 -p tcp -m udp --dport 53 -j ACCEPT -m comment --comment "allow DNS: domain" -A INPUT -i eth0 -p tcp -m tcp --dport 21 -j ACCEPT -m comment --comment "allow FTP: ftp" -A INPUT -i eth0 -p udp -m udp --dport 21 -j ACCEPT -m comment --comment "allow FTP: ftp" -A INPUT -i eth0 -p tcp -m tcp --dport 20 -j ACCEPT -m comment --comment "allow FTP: ftp-data" -A INPUT -i eth0 -p udp -m udp --dport 20 -j ACCEPT -m comment --comment "allow FTP: ftp-data" -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT -m comment --comment "allow MariaDB/MySQL: mysql" -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT -m comment --comment "allow HTTP (apache/nxing/lighttpd)" -A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT -m comment --comment "allow HTTPS (apache/nxing/lighttpd)" -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -m comment --comment "allow already established connections" COMMIT 

Y sólo para el registro … estas políticas por defecto debe ser establecido demasiado, si el iptables-restore anterior no se utiliza:

 iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP 

¿Por qué permite ftp y dns? ¿Su servidor proporciona esos servicios? FTP no debe ser utilizado, excepto para algunos casos de uso muy específicos, use SFTP en lugar (no FTPS). Además, ¿por qué especificar todos los otros puertos por nombres simbólicos y http por el numérico 80? ¿Acabas de copiar esto desde otro lugar? No copiar y asesorar va a compensar la falta de comprensión. Asegúrese de comprender TCP, IP, firewalls y los protocolos de los servicios que va a proporcionar.

  • Cómo enrutar todo el tráfico HTTP de eth1 a Squid Proxy? ¿Las reglas de Iptable?
  • ¿Pueden iptables abrirse después de un error de configuration?
  • ¿Utilizas iptables para reenviar ipv6 a ipv4?
  • Crear un equilibrador de carga Linux multihomed con dos conexiones de Internet y una connection LAN
  • Iptables y declaraciones condicionales. ¿Es posible?
  • Cómo configurar IPTables en el host KVM - iptables-persistent está siendo ignorado
  • No se puede hacer ping a una networking externa desde detrás de un enrutador de Linux
  • Simular 2 clústeres en la misma networking
  • Con iptables, los packages de coincidencia llegaron a través del túnel IPSEC
  • iptable localhost conexiones informó de ser bloqueado, pero funciona bien
  • Pregunta de iptables para reenvío de puertos
  • ¿Cómo puedo permitir que mi server ftp a sí mismo?
  • TCP 443 La connection entra en el server pero nunca alcanza Apache2 (pasajero)
  • El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.