Configurando un Cortafuegos(firewall) de Linux con Iptables / NetFilter
(Traduccion al espa�ol por KAM)
Tony Perrie
Ingeniero / Cientifico
IBM Red de Desarrollo de Procesadores
Rochester, Minnesota
Enero 9, 2002
Aplicaciones a Filtros de Paquetes Linux
* 1a Generacion – Puerto BSD para UNIX ipfw de Alan Cox al Linux 1.1
* 2a Generacion – Jos Vos y otros agregan la herramienta ipfwadm en Linux 2.0.
* 3a Generacion – Rusty Russel y Michael Neuling hacen cambios significantivos a ipfw e ipchains fue estrenado en Linux 2.2.
* 4a Generacion – Rusty Russel y otros aplicaron una infraestructura modular de filtro/colador de paquetes llamado NetFilter para Linux 2.4.
Ruteando Paquetes con SNAT
* Source Network Address Translation (Traductor de Direcciones de Red/NAT) te permite tener acceso a una red externa (generalmente el internet) desde detras de un cortafuegos(firewall).
* Habilitar Redireccionamiento de Paquetes
o echo 1 > /proc/sys/net/ipv4/ip_forward
o Permite un envio IP a nivel kernel
o Deshabilitado de manera preestablecida en la mayoria de los distros
o Reinicio de servicio de red reinicializa la ip_forward a 0 (al menos que tengas h4x0red /etc/init.d/network)
* Habilitar Enmascaramiento
o IP Dinamica: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
o IP Estatica: iptables -t nat -A POSTROUTING -o eth0 -j SNAT -to 24.0.0.0
o Esto permite a las maquinas enmascararse desde detras de un cortafuegos (firewall).
Principios Preestablecidos / Bloqueo de Puertos de Salida
* Principios Preestablecidos
o iptables -P INPUT DROP
+ Esto esta altamente recomendado como dato preestablecido.
+ Basicamente desecha todo lo demas al menos que se le diga algo distinto.
o iptables -P OUTPUT ACCEPT
+ Algunos sugieren preestablecer OUTPUT a DROP
+ Realmente no es muy necesario.
o iptables -P FORWARD ACCEPT
o Esto es necesario para NAT / MASQUERADING (Enmascaramiento de NAT)
* Bloqueo de puertos de salida
o Ten cuidado al bloquear puertos de salida. Bloquear el puerto de salida 80 no solo bloquea a los hackers tambien bloquea el IE, Netscape, Galeon, de accesar a los servidores de red mas comunes.
o iptables -A OUTPUT -o eth0 -p tcp -dport 31337 -j DROP
o iptables -A OUTPUT -o eth0 -p tcp -sport 31337 -j DROP
Bloqueo de puertos de salida / Bloqueo de puertos externos
* Bloqueo de puertos de salida continua
o Puertos a bloquear: 31337 , 31335, 27444, 27665, 20034 NetBus, 9704, 137-139 (smb), 1433, 2049, 5432, 5999, 6063, 5900-5910 (vnc)
* Bloqueo de puertos externos
o Reject Ident Requests (usuarios del IRC probablemente querran acceptar ident)
o iptables -A FORWARD -i eth0 -p tcp -dport 113 -j REJECT
o iptables -A OUTPUT -o eth0 -p tcp -dport 113 -j REJECT
o Allow Nortel IPSEC Rekey Packets (IBM VPN)
o iptables -A FORWARD -i eth0 -p tcp -dport 500 -j ALLOW
o iptables -A OUTPUT -o eth0 -p tcp -dport 500 -j ALLOW
Desechando Paquetes Falsos / Guardando anotaciones (Log) Y Limitando el Trafico Sospechoso
* Desechando Paquetes Falsos
o RESERVED_NET=”0.0.0.0/8 1.0.0.0/8 2.0.0.0/8 5.0.0.0/8 7.0.0.0/8 … ”
para NET en $RESERVED_NET; dale
iptables -A FORWARD -d $NET -j DROP
done
* Guardando Anotaciones de Paquetes sospechosos
o Crea una nueva “chain” llamada CHECK_FLAGS
o iptables -N CHECK_FLAGS
o iptables -A CHECK_FLAGS -p tcp -tcp-flags ALL FIN,URG,PSH -m limit -limit 5/minute -j LOG -log-level 6
-log-prefix “NMAP-XMAS:”
o iptables -A CHECK_FLAGS -p tcp -tcp-flags ALL FIN,URG,PSH -j DROP
Saltar una Cadena Personalizada / Define “Stateful Rules”
* Saltar una Cadena Personalizada
o iptables -A INPUT -i eth0 -j CHECK_FLAGS
o iptables -A FORWARD -i eth0 -j CHECK_FLAGS
* Define “Stateful Rules”
o iptables -A OUTPUT -m state -state INVALID -j DROP
o iptables -A OUTPUT -m state -state RELATED, ESTABLISHED -j ACCEPT
o iptables -A OUTPUT -i ! eth0 -m state
-state NEW -j ACCEPT
o ACEPTA paquetes cuya interfase de entrada es todo menos la interfase externa.
Bloqueando ICMP / Reenvio de puertos con DNAT
* Reenvio de puertos
o Port Forwarding an IPSEC cliente/servidor en 500 usando protocolo 17 (necesario para acceso VPN)
o iptables -t nat -A PREROUTING -i eth0 -p 17 -dport 500 -j DNAT -to 192.168.0.2:500
o Reenvio de puerto WWW en Puerto 80
o iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 80 -j DNAT -to 192.168.0.2:80
* Bloqueando ICMP
o Usando el preestablecido DROP para bloques de entrada ICMP (Ping)
o iptables -A OUTPUT -i eth0 -p icmp
-icmp-type 8 -j DROP
o iptables -A FORWARD -i eth0 -p icmp
-icmp-type 8 -j DROP
o iptables -A OUTPUT -i eth0 -p icmp
-icmp-type 8 -j ACCEPT
Colando Paquetes ToS / Direcciones MAC como Criterio para Filtrar
* Colando Paquetes ToS
o Permite a los parametros del Type-Of-Service ser fijados para protocolo
o iptables -t mangle -A FORWARD -p tcp -dport 22 -j TOS -set-tos 16
o iptables -t mangle -A FORWARD -p tcp -dport 80 -j TOS -set-tos 8
* Direcciones MAC como Criterio al Filtrar
o iptables -A FORWARD -m state -state NEW -m mac -mac-source 00:C7:8F:72:14 -j ACCEPT
o Permite a una direccion MAC conocida el ser reenviada.
Acceso IBM-Rochester Nortel VPN
## OPENS NORTEL EXTERNAL PORT 500
iptables -A OUTPUT -i eth0 -p tcp
–dport 500 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp
–dport 500 -j ACCEPT
## PORT FORWARD FOR IPSEC “REKEYING”
iptables -t nat -A PREROUTING -i eth0 -p 17
–dport 500 -j DNAT –to 192.168.0.2:500
* Asumiendo que 192.168.0.2 es la computadora que estas corriendo en tu cliente de VPN y eth0 es externo.
Configurando dhcpd
#filename: /etc/dhcpd.conf
default-lease-time 86400;
max-lease-time 86400;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.250;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.4,
12.24.250.39, 12.24.250.40, 206.25.127.40;
option domain-name “chartermi.net”;
}
* En computadoras Redhat hac� un “service dhcpd start” para arrancar el demonio del dhcpd.






