Guía de Configuración de Firewalls BarbedWire Elaborada para la SSA en B.C.S. Guía de configuración de Firewalls BarbedWire Elaborada para la SSA en B.C.S Marco Antonio Castro Liera Marco Antonio Castro Liera [email protected] Guía de Configuración de Firewalls BarbedWire Elaborada para la SSA en B.C.S. Guía de Configuración de Firewalls BarbedWire con CentOS 5.0. Para la presente gúia asumiremos que en nuestro firewall se encuentra ya instalada la versión 5.0 de la distribución de GNU/Linux, CentOS 5.0. Y se domina la forma de conectarse mediante una consola al equipo. Asimismo, el usuario deberá tener conocimientos generales sobre el trabajo con archivos en linux y la edición de archivos de texto. Es recomendable que se tengan conocimientos sobre TCP/IP y enrutamiento para entender el funcionamiento del firewall. Configuración de direcciones IP: En el directorio /etc/sysconfig/network-scripts se encuentra un archivo de configuración para cada una de las interfaces de red llamado ifcfg-DEV donde DEV se sustituye por el nombre del archivo de dispositivo de la interfaz de red correspondiente, para el caso de los switches BarbedWire se cuenta con 4 interfaces de red: 1. 2. 3. 4. eth0 eth1 eth2 eth3 Para el ejemplo actual asumiremos que el firewall se encuentra conectado a la red homologada 201.147.242.112/28, con dos interfaces, eth0 con la IP 201.147.242.114 y eth0 con la IP 201.147.242.115 los archivos de configuración quedarían como sigue: Archivo: /etc/sysconfig/network-scripts/ifcfg-eth0 # Intel Corporation 82557/8/9 [Ethernet Pro 100] DEVICE=eth0 BOOTPROTO=none BROADCAST=201.147.242.127 HWADDR=00:10:F3:0E:59:CA IPADDR=201.147.242.114 NETMASK=255.255.255.240 NETWORK=201.147.242.112 ONBOOT=yes GATEWAY=201.147.242.113 TYPE=Ethernet USERCTL=no IPV6INIT=no PEERDNS=yes Marco Antonio Castro Liera [email protected] Guía de Configuración de Firewalls BarbedWire Elaborada para la SSA en B.C.S. Archivo: /etc/sysconfig/network-scripts/ifcfg-eth3 # Intel Corporation 82541GI Gigabit Ethernet Controller DEVICE=eth3 BOOTPROTO=none HWADDR=00:10:F3:0E:59:C9 ONBOOT=yes DHCP_HOSTNAME=hermes.com TYPE=Ethernet IPADDR=201.147.242.115 NETMASK=255.255.255.240 GATEWAY=201.147.242.113 USERCTL=no IPV6INIT=no PEERDNS=yes Donde la línea DEVICE marca el nombre del archivo de dispositivo asociado a la interfaz de red, BOOTPROTO el protocolo de configuración de la interfaz (none para IPs estáticas o dhcp para usar ese protocolo), HWADDR contiene la dirección MAC de la interfaz, ONBOOT permite especificar si se activará automáticamente la interfaz al arrancar el equipo, IPADDR permite especificar la dirección IP, NETMASK la máscara de red, GATEWAY la dirección del router (puerta de enlace) en la red actual. El resto de las líneas del archivo son opcionales. La interfaz eth1 se encuentra conectada a la red local 10.3.1.0/20 por lo que el archivo de configuración quedaría como sigue: Archivo: /etc/sysconfig/network-scripts/ifcfg-eth1 # Intel Corporation 82557/8/9 [Ethernet Pro 100] DEVICE=eth1 BOOTPROTO=none HWADDR=00:10:F3:0E:59:CB ONBOOT=yes DHCP_HOSTNAME=hermes.com TYPE=Ethernet IPADDR=10.3.1.10 NETMASK=255.255.240.0 USERCTL=no IPV6INIT=no PEERDNS=yes Ahora bien, la interfaz eth2 se encuentra deshabilitada por lo que el archivo de configuración sería: Archivo: /etc/sysconfig/network-scripts/ifcfg-eth2 # Intel Corporation 82541GI Gigabit Ethernet Controller DEVICE=eth2 BOOTPROTO=dhcp HWADDR=00:10:F3:0E:59:C8 ONBOOT=no DHCP_HOSTNAME=hermes.com TYPE=Ethernet Marco Antonio Castro Liera [email protected] Guía de Configuración de Firewalls BarbedWire Elaborada para la SSA en B.C.S. Habilitación de las consolas: Para habilitar las consolas del dispositivo, deben de incluirse las líneas marcadas en negritas en el archivo /etc/inittab: Archivo: /etc/inittab # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 T0:2345:respawn:/sbin/agetty ttyS0 9600 vt100 T1:2345:respawn:/sbin/agetty ttyS1 9600 vt100 Si el router cuenta con dos salidas seriales para consola (modelo DPI 250E), se deben incluir ambas líneas, en caso contratio (modelo DPI 100e) solo debe incluirse la primera línea (T0:2345:respawn:/sbin/agetty ttyS0 9600 vt100). Habilitación del reenvio de paquetes: Para que el dispositivo enrute paquetes entre las iterfases activas, debemos prender el bit de configuración de reenvio de paquetes en los archivos de configuración del kernel cada vez que arranque el equipo, por lo que debe agregarse la línea marcada con negritas en el archivo /etc/rc.local Archivo: /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local /bin/echo 1 > /proc/sys/net/ipv4/ip_forward Configuración de IPTABLES: La configuración de ipatbles puede hacerse mediante el comando iptables desde una terminal común o mediante webmin. Cuando tengamos el firewall funcionando a nuestro gusto, se ejecuta el comando service iptables save para guardar la configuración en los archivos de configuración de arranque de iptables /etc/sysconfig/iptables. Marco Antonio Castro Liera [email protected] Guía de Configuración de Firewalls BarbedWire Elaborada para la SSA en B.C.S. Archivo: /etc/sysconfig/iptables (como se provee el firewall) # Generated by iptables-save v1.3.5 on Wed Jul 11 13:12:36 2007 *mangle :PREROUTING ACCEPT [3139:269048] :INPUT ACCEPT [3038:259852] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [2916:339551] :POSTROUTING ACCEPT [2916:339551] COMMIT # Completed on Wed Jul 11 13:12:36 2007 # Generated by iptables-save v1.3.5 on Wed Jul 11 13:12:36 2007 *nat :PREROUTING ACCEPT [103:9284] :POSTROUTING ACCEPT [36:2445] :OUTPUT ACCEPT [36:2445] -A PREROUTING -i eth0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 10.3.1.10 -A PREROUTING -i eth0 -p udp -m udp --dport 3389 -j DNAT --to-destination 10.3.1.10 -A PREROUTING -i eth0 -p tcp -m tcp --dport 1433 -j DNAT --to-destination 10.3.1.10 -A PREROUTING -i eth0 -p udp -m udp --dport 1433 -j DNAT --to-destination 10.3.1.10 -A POSTROUTING -o eth3 -j SNAT --to-source 201.147.242.115 COMMIT # Completed on Wed Jul 11 13:12:36 2007 # Generated by iptables-save v1.3.5 on Wed Jul 11 13:12:36 2007 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [2916:339551] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT -A RH-Firewall-1-INPUT -p ah -j ACCEPT -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT # Completed on Wed Jul 11 13:12:36 2007 Tabla Mangle En nuestro caso la tabla Mangle se encuentra vacía debido a que no hacemos transformaciones a los paquetes reenviados. Marco Antonio Castro Liera [email protected] Guía de Configuración de Firewalls BarbedWire Elaborada para la SSA en B.C.S. Tabla Filter La tabla Filter incluye todas las reglas de filtrado de paquete y actualmente prohibe todos los paquetes entrantes al firewall, a excepción de aquellos que se encuentren dirigidos a los puertos ● ● ● ● ● ● ● 25 (SMTP) 22 (SSH2 53 (DNS) 80 (HTTP) 110 (POP3) 443 (HTTPS) 10000 (WebMin) -A -A -A -A -A -A -A -A -A RH-Firewall-1-INPUT RH-Firewall-1-INPUT RH-Firewall-1-INPUT RH-Firewall-1-INPUT RH-Firewall-1-INPUT RH-Firewall-1-INPUT RH-Firewall-1-INPUT RH-Firewall-1-INPUT RH-Firewall-1-INPUT -p -p -p -p -p -p -p -p -j tcp -m tcp -m tcp -m tcp -m tcp -m tcp -m udp -m tcp -m REJECT state --state state --state state --state state --state state --state state --state state --state state --state --reject-with NEW -m tcp --dport 25 -j ACCEPT NEW -m tcp --dport 22 -j ACCEPT NEW -m tcp --dport 80 -j ACCEPT NEW -m tcp --dport 110 -j ACCEPT NEW -m tcp --dport 443 -j ACCEPT NEW -m tcp --dport 53 -j ACCEPT NEW -m udp --dport 53 -j ACCEPT NEW -m tcp --dport 10000 -j ACCEPT icmp-host-prohibited y los dirigidos hacia el protocolo ICMP (esta línea puede eliminarse si no se necesita hacer ping al firewall y se desean evitar ataques de DDOS (Como Smurfing). -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT La Tabla NAT La tabla NAT permite la configuración de la traducción de direcciones de red, tanto para compartir una salida a internet con una sola ip homologada, como para la redirección de paquetes entrantes hacia un servidor de nuestra red local. Esta tabla se configuró de tal forma que se reenvien las peticiones hechas a sqlserver hacia la IP 201.147.242.115 en los puertos de sqlserver sean redireccionadas hacia 10.3.1.10 -A -A -A -A PREROUTING PREROUTING PREROUTING PREROUTING -i -i -i -i eth3 eth3 eth3 eth3 -p -p -p -p tcp udp tcp udp -m -m -m -m tcp udp tcp udp --dport --dport --dport --dport 3389 3389 1433 1433 -j -j -j -j DNAT DNAT DNAT DNAT --to-destination --to-destination --to-destination --to-destination 10.3.1.10 10.3.1.10 10.3.1.10 10.3.1.10 Asimismo las computadoras en la red local podrán acceder a internet mediante esa ip homologada -A POSTROUTING -o eth3 -j SNAT --to-source 201.147.242.115 Marco Antonio Castro Liera [email protected] Guía de Configuración de Firewalls BarbedWire Elaborada para la SSA en B.C.S. Agregando filtros a iptables Si queremos filtar paquetes de la red local hacia internet tenemos varias opciones, por ejemplo, para filtrar los paquetes dirigidos a la ip 172.16.10.1 podemos ejecutar el comando: iptables -I FORWARD -d 172.16.10.1 -j DROP para filtrar los paquetes provenientes de la ip 172.16.10.1 podemos ejecutar el comando: iptables -I FORWARD -s 172.16.10.1 -j DROP Para filtrar los paquetes dirigidos a puertos específicos podemos hacerlo mediante comandos que utilicen las directivas –dport (puerto destino del socket) y -sport (puerto fuente del socket), por ejemplo, para filtrar el rango de puertos que utilza emule ejecutaríamos los comandos: iptables iptables -I FORWARD -p tcp --dport 4660:4670 -j DROP -I FORWARD -p tcp --sport 4660:4670 -j DROP a continuación se incluye un ejemplo que deshabilita varios programas de comparición peer to peer: #cutoff emule/torrent iptables -I FORWARD -p tcp -m multiport --dports 6881,6882,6883,6884,6885,6886,6887,6888,6889,1214 -j REJECT iptables -I FORWARD -p udp -m multiport --dports 6881,6882,6883,6884,6885,6886,6887,6888,6889,1214 -j REJECT iptables -I FORWARD -p tcp -m multiport --dports 6346,6347 -j REJECT iptables -I FORWARD -p udp -m multiport --dports 6346,6347 -j REJECT iptables -I FORWARD -p tcp -m multiport --dports 4711,4665,4661,4672,4662,8080,9955 -j REJECT iptables -I FORWARD -p udp -m multiport --dports 4711,4665,4661,4672,4662,8080,9955 -j REJECT iptables -I FORWARD -p tcp --dport 4242:4299 -j REJECT iptables -I FORWARD -p udp --dport 4242:4299 -j REJECT iptables -I FORWARD -p tcp --dport 6881:6999 -j REJECT iptables -I FORWARD -p udp --dport 6881:6999 -j REJECT Las líneas que incluyen listas de puertos aparecen en dos partes por cuestiones de espacio, recuerde siempre que para guardar las reglas en el archivo de arranque puede hacerlo mediante el comando service iptables save Marco Antonio Castro Liera [email protected] Guía de Configuración de Firewalls BarbedWire Elaborada para la SSA en B.C.S. Le recomendamos hacer una copia del archivo de configuración /etc/sysconfig/iptables antes de efectuar cualquiera de estas operaciones, de tal forma que pueda recuperarlo en casos de corrupción del mismo. Si desea una referencia completa sobre el funcionamiento de iptables, le recomendamos consultar la guía hecha por Xabier Altadill Izura que puede descargarse desde http://www.pello.info/filez/firewall/IPTABLES.pdf Marco Antonio Castro Liera [email protected]