#!/bin/sh ## SCRIPT de IPTABLES - ejemplo del manual de iptables ## Ejemplo de script para proteger la propia máquina con DROP por defecto ## Pello Xabier Altadill Izura ## www.pello.info - pello@pello.info ## Actualizado 08-09-2006 # Borrado de reglas anteriores # echo "Borrando reglas anteriores ..." ## FLUSH de reglas iptables -F iptables -X iptables -Z iptables -t nat -F ## Establecemos politica por defecto: DROP # echo "Estableciendo politica por defecto: DROP" iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP ## Empezamos a filtrar? no! empezamos a abrir! porque ahora esta TODO denegado. ## Debemos decir de manera explicita qué es lo que queremos abrir # echo "Abriendo todo para el localhost" # Operar en localhost sin limitaciones iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Al firewall tenemos acceso desde la red local iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT ## WAN # Permitimos que la maquina conecte a puertos de correo # SMTP 25 iptables -A INPUT -p tcp --dport 25 -j ACCEPT iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # POP3 110 iptables -A INPUT -p tcp --dport 110 -j ACCEPT iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT # ADMINISTRACION REMOTA # Abrimos el puerto ssh 22 iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT # Abrimos el puerto vnc-http-1 5801 iptables -A INPUT -p tcp --dport 5801 -j ACCEPT iptables -A OUTPUT -p tcp --dport 5801 -j ACCEPT # Abrimos el puerto vnc-1 5900 iptables -A INPUT -p tcp --dport 5900 -j ACCEPT iptables -A OUTPUT -p tcp --dport 5900 -j ACCEPT ## Abrimos el acceso a otros puertos # Abrimos el puerto del apache es un servidor web iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT #iptables -A INPUT -p tcp --dport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT #iptables -A OUTPUT -p tcp --dport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT # Abrimos el puerto del ftp 20 y 21 es un servidor ftp iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT iptables -A OUTPUT -p tcp --dport 20:21 -j ACCEPT # Abrimos el puerto del NTPD iptables -A INPUT -p tcp --dport 123 -j ACCEPT iptables -A OUTPUT -p tcp --dport 123 -j ACCEPT iptables -A INPUT -p udp --dport 123 -j ACCEPT iptables -A OUTPUT -p udp --dport 123 -j ACCEPT # Abrimos el puerto del P2P (aMule) 4662 tcp y 4665, 4672 udp # 4662 tcp iptables -A INPUT -p tcp --dport 4662 -j ACCEPT iptables -A OUTPUT -p tcp --dport 4662 -j ACCEPT # 4665 udp iptables -A INPUT -p udp --dport 4665 -j ACCEPT iptables -A OUTPUT -p udp --dport 4665 -j ACCEPT # 4672 udp iptables -A INPUT -p udp --dport 4672 -j ACCEPT iptables -A OUTPUT -p udp --dport 4672 -j ACCEPT # Abrimos el puerto del P2P (Azureus) 59250 tcp y udp # 59250 tcp iptables -A INPUT -p tcp --dport 59250 -j ACCEPT iptables -A OUTPUT -p tcp --dport 59250 -j ACCEPT # 59250 udp iptables -A INPUT -p udp -m udp --dport 59250 -j ACCEPT iptables -A OUTPUT -p udp -m udp --dport 59250 -j ACCEPT # Y abrimos el puerto pptpd para la ip del adsl de casa del jefe #iptables -A INPUT -s 231.45.134.23 -p tcp --dport 1723 -j ACCEPT #iptables -A OUTPUT -d 231.45.134.23 -p tcp --sport 1723 -j ACCEPT # Permitimos que la maquina pueda salir a la web # si le ponemos la opcion "-m state --state ESTABLISHED,RELATED -j ACCEPT" no navegara iptables -A INPUT -p tcp --sport 80 -j ACCEPT iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT # Y tambien a webs seguras iptables -A INPUT -p tcp --sport 443 -j ACCEPT iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT # Reglas necesarias para FTP pasivo y activo. Se permiten conexiones entrantes YA establecidas iptables -A INPUT -p tcp --sport 20:21 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --dport 20:21 -j ACCEPT iptables -A INPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --dport 1024:65535 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT # Permitimos la consulta a un primer DNS iptables -A INPUT -s 200.13.224.8 -p udp --sport 53 -j ACCEPT iptables -A OUTPUT -d 200.13.224.8 -p udp --dport 53 -j ACCEPT # Permitimos la consulta a un segundo DNS iptables -A INPUT -s 200.75.78.78 -p udp --sport 53 -j ACCEPT iptables -A OUTPUT -d 200.75.78.78 -p udp --dport 53 -j ACCEPT # Permitimos consultar el reloj de ch.pool.ntp.org (Switzerland) para sincronizarse iptables -A INPUT -s 217.150.242.8 -p udp --dport 123 -j ACCEPT iptables -A OUTPUT -d 217.150.242.8 -p udp --sport 123 -j ACCEPT ## MENSAJERIA INSTANTANEA # Aceptamos conexiones AOL #iptables -A INPUT -p tcp --sport 9898 -j ACCEPT #iptables -A OUTPUT -p tcp --dport 9898 -j ACCEPT # Aceptamos conexiones ICQ #iptables -A INPUT -p tcp --sport 5190:5193 -j ACCEPT #iptables -A OUTPUT -p tcp --dport 5190:5193 -j ACCEPT # Aceptamos conexiones Jabber #iptables -A INPUT -p tcp --sport 5222:5223 -j ACCEPT #iptables -A OUTPUT -p tcp --dport 5222:5223 -j ACCEPT # Aceptamos conexiones Yahoo! Messenger #iptables -A INPUT -p tcp --sport 5000:5010 -j ACCEPT #iptables -A OUTPUT -p tcp --dport 5000:5010 -j ACCEPT # Aceptamos conexiones MSN Messenger #iptables -A INPUT -p tcp --sport 1863 -j ACCEPT #iptables -A OUTPUT -p tcp --dport 1863 -j ACCEPT ## LAN ## Ahora con regla FORWARD filtramos el acceso de la red local ## al exterior. Como se explica antes, a los paquetes que no van dirigidos al ## propio firewall se les aplican reglas de FORWARD # Aceptamos que vayan a puertos 80 http iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 80 -j ACCEPT # Aceptamos que vayan a puertos 443 https iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 443 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 443 -j ACCEPT # Aceptamos que vayan a puertos SMTP correo iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 25 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 25 -j ACCEPT # Aceptamos que vayan a puertos POP3 correo iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 110 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 110 -j ACCEPT # Aceptamos que vayan a puertos 20 y 21 Data ftp iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 20:21 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 20:21 -j ACCEPT # Aceptamos que consulten los DNS iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 53 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 53 -j ACCEPT iptables -A FORWARD -d 192.168.1.0/24 -p udp --dport 53 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p udp --sport 53 -j ACCEPT # Aceptamos conexiones SAMBA 137 y 139 iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 137 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 137 -j ACCEPT iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 139 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 139 -j ACCEPT # Aceptamos conexiones 68 DHCP iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 68 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 68 -j ACCEPT iptables -A FORWARD -d 192.168.1.0/24 -p udp --dport 68 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p udp --sport 68 -j ACCEPT # Aceptamos conexiones NTPD iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 123 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 123 -j ACCEPT iptables -A FORWARD -d 192.168.1.0/24 -p udp --dport 123 -j ACCEPT iptables -A FORWARD -s 192.168.1.0/24 -p udp --sport 123 -j ACCEPT ## MENSAJERIA INSTANTANEA # Aceptamos conexiones AOL #iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 9898 -j ACCEPT #iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 9898 -j ACCEPT # Aceptamos conexiones ICQ #iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 5190:5193 -j ACCEPT #iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 5190:5193 -j ACCEPT # Aceptamos conexiones Jabber #iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 5222:5223 -j ACCEPT #iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 5222:5223 -j ACCEPT # Aceptamos conexiones Yahoo! Messenger #iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 5000:5010 -j ACCEPT #iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 5000:5010 -j ACCEPT # Aceptamos conexiones MSN Messenger #iptables -A FORWARD -d 192.168.1.0/24 -p tcp --dport 1863 -j ACCEPT #iptables -A FORWARD -s 192.168.1.0/24 -p tcp --sport 1863 -j ACCEPT # Ahora hacemos enmascaramiento de la red local # y activamos el BIT DE FORWARDING (imprescindible!!!!!) iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE # Con esto permitimos hacer forward de paquetes en el firewall, o sea # que otras máquinas puedan salir a traves del firewall. echo 1 > /proc/sys/net/ipv4/ip_forward # Activamos el redireccionamiento del puerto 80 -> 3128 para hacerlo transparente iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128 # Barrera de backup por si cambiamos a modo ACCEPT temporalmente # Con esto protegemos los puertos reservados y otros well-known iptables -A INPUT -p tcp --dport 1:1024 -j DROP iptables -A INPUT -p udp --dport 1:1024 -j DROP iptables -A INPUT -p tcp --dport 1723 -j DROP iptables -A INPUT -p tcp --dport 3306 -j DROP iptables -A INPUT -p tcp --dport 5432 -j DROP echo " OK . Verifique reglas con: iptables -L -n" # Fin del script # iptables -L -t nat -v -n Chain PREROUTING (policy ACCEPT 825 packets, 113K bytes) pkts bytes target prot opt in out source destination 0 0 REDIRECT tcp -- * * 192.168.1.0/24 0.0.0.0/0 tcp dpt:80 redir ports 3128 Chain POSTROUTING (policy ACCEPT 1354 packets, 86626 bytes) pkts bytes target prot opt in out source destination 0 0 MASQUERADE all -- * eth0 192.168.1.0/24 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 1271K packets, 79M bytes) pkts bytes target prot opt in out source destination alpha:/home/angel/HPProliantML370G4/firewall #