Iptables en Ubuntu

Para los paranoicos, explico un modo muy simple de implementar iptables con el fin de cerrar todos los puertos que queramos de nuestro pc.
Iptables es un sistema firewall muy potente incluido en el nucleo de Linux y que requiere una serie de conocimientos. Hay cientos de tutoriales en la red.
No obstante me voy a centrar en alguien que puede ser un usuario normal y que desea lo siguiente:

-Cerrar todos los puertos de entrada
-Navegar por internet
-Permitir el acceso a internet de cualquier aplicación que él inicie.
-Permitir la libre navegación de la LAN de confianza si la tiene

En primer lugar instalamos el paquete iptables:

#apt-get install -test iptables

Esto nos activará el servicio por defecto. Solo queda implementar el script de iptables con nuestras reglas y hacer que se carguen al inicio.

El script que yo tengo, sin entrar en detalles viene a ser algo asi, muy sencillo:

--------------------
#!/bin/bash

#-s Especifica una dirección de origen
#-d Especifica una dirección de destino
#-p Especifica un prototocolo
#-i Especifica un interface de entrada
#-o Especifica un interface de salida
#-j Especifica la acción a ejecutar sobre el paquete
#--sport Puerto de origen
#--dport Puerto de destino

#Borrar todas las reglas
iptables -F

#Politica general.Cerramos todo.Dejamos entrar y salir lo solicitado
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

###OTRAS PROTECCIONES####

# Quitamos los pings.
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

# No respondemos a los broadcast.
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Para evitar el spoofing nos aseguramos de que la dirección
# origen del paquete viene del sitio correcto.
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
/bin/echo "1" > ${interface}
done

# Los ICMPs redirigidos que pueden alterar la tabla de rutas.
for interface in /proc/sys/net/ipv4/conf/*/accept_redirects; do
/bin/echo "0" > ${interface}
done

# No guardamos registros de los marcianos.
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

# Asegurar, aunque no tenga soporte el nucleo, q no hay forward.
/bin/echo "0" > /proc/sys/net/ipv4/ip_forward

###Reglas de los puertos####

# Permitimos que se conecten a nuestro servidor web.

#iptables -A INPUT -m state --state NEW -p TCP --dport 80 -j ACCEPT

#Abrimos ssh a la red.
#iptables -A INPUT -s 172.26.0.3 -p TCP --dport 22 -j ACCEPT
#iptables -A INPUT -s 172.26.0.4 -p TCP --dport 22 -j ACCEPT
#iptables -A INPUT -s 172.26.0.5 -p TCP --dport 22 -j ACCEPT

#iptables -A INPUT -p TCP --dport 22 -j ACCEPT

# Permitimos la comunicación con el servidor dns
iptables -A INPUT -p UDP --dport 53 -j ACCEPT
iptables -A INPUT -p TCP --dport 53 -j ACCEPT

#Permitimos uso de ftp.
#iptables -A INPUT -p TCP --dport 21 -j ACCEPT

#Permitimos acceso pop3.
#iptables -A INPUT -p TCP --dport 110 -j ACCEPT

# Permitimos uso de smtp
#iptables -A INPUT -p TCP --dport 25 -j ACCEPT

#Permitimos acceso imap.
#iptables -A INPUT -p TCP --dport 143 -j ACCEPT
#iptables -A INPUT -p UDP --dport 143 -j ACCEPT

#Permitimos todo el trafico de la LAN
iptables -A INPUT -s 172.26.0.2 -j ACCEPT
iptables -A INPUT -s 172.26.0.4 -j ACCEPT
iptables -A INPUT -s 172.26.0.5 -j ACCEPT

#Dejamos a localhost, para mysql, etc..
iptables -A INPUT -i lo -j ACCEPT

----------------------

Logicamente las lineas van juntas. Solo se aplican las lineas no comentadas con # , las otras son para mi servidor.

el fichero se puede llamar por ejemplo firewall.sh , debemos darle permisos de ejecución:

#chmod +x firewall.sh

Ahora si aplicamos el script de este modo:

#sh firewall.sh

podemos ver la salida de iptables haciendo:

#iptables -L

que viene a ser algo asi:

--------------------
root@platas:/home/herje # iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT all -- glorioso anywhere
ACCEPT all -- minime anywhere
ACCEPT all -- placebo anywhere
ACCEPT all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
root@platas:/home/herje #

--------------------

Solo falta hacer que las reglas se carguen al inicio, para ello copiamos el script en /etc/init.d y lo ponemos por default:

#cp firewall.sh /etc/init.d/
#update-rc.d firewall.sh defaults

Y listo con esto tenemos nuestro firewall funcionando.
Agradezco cualquier aclaración, complemento etc.. teniendo en cuenta que está pensado para un user casero y sin grandes pretensiones.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

weno ya que aki hay algo rela

weno ya que aki hay algo relacionado con iptables sera que me puedan ayudar en esta situacion tengo una conexion adsl

de la siguiente manera:

con una de las makinas tiene ubuntu(con la cual mando mi usuario y pass a mi iSP) y las otras windows

logro hacer que se comparta el internet con las siguientes reglas de iptables:
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/modprobe iptable_nat
/sbin/iptables -t nat -A POSTROUTING --src 192.168.0.0/24 -o ppp0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

quiero aclarar que el modem adsl no es router y es un bridge.
si quieren saber el modelo del mi modem es un speedstream 5200 ethernet/usb

mi problema es que en las makinas de windows no puedo abrir ni el msn ni hotmail ni cualkier otra pagina que requiera respuesta de internet.
Pero si puedo navegar en el google y otras paginas bajar archivos usar ftp etc....

alguna sugerencia para resolver el problema.....

quisas esto te funcione

segun tu esquema es una topologia estrella
asi cada maquina tiene ecceso a internet de manera independiente

a mi me funciona bien teniendo como de puerta de enlace a 1 equipo. Como te conectas por ubuntu, este dejalo como servidor.

el bridge conectalo al pc con ubuntu

instalas el servidor de dhcp en ubuntu apt-get install dhcp3-server

y las maquinas con windows obviamente conectadas con ips automaticas y a traves de hub o switch conectadas a la placa de red del pc con ubuntu.

espero que te pueda ayudar, es sencillo y solo tienes que mover algunos cables nada mas.

ALGUIEN SABE

Tengo una LAN ke esta dentro de un server, topologia estrella, mi duda es, ¿como puedo sakar un pc de la LAN a internet directo con iptables??

respuesta relacionada

Compañero creo q he leido este post en otra pagina yo utilizo ono y he tenido q buscar por hay alguna cosilla en especial pero quizas este manual te sea de utilidad ya ha mi me ha servido.
Quizas no siga la forma como tu quieres instalarlo pero a mi me hes valido para un ordenador como servidor con ubuntu y otro con ubuntu conectado a travez de tarjeta de red y cable cruzado.
http://www.redes-linux.com/ono.php?pag=1
Espero te valga.Desde el segundo ordenador salgo a internet y utilizo amsn, recojo mi correo,etc no he probado nada mas.

..........................................................
suario linux register nº#316217
Linux una forma de vida

Si reparas tu problema, añade(Solucionado)en el asunto de tu primer post, así es mas fácil para el que busca después.Mi Blog

ip_forward

Hola me podriais comentar como puedo conseguir que no me diga acceso denegado cada vez k intento cambiarle el bit de forward???

1 Saludete

Archivo de iptables??

Vengo de trabajar con otras distros, y por ahora me esta gustando mucho ubuntu...
El tema es que siempre he editado directamente el archivo de iptables, (en el caso de fedora era /etc/sysconfig/iptables) Aqui en ubuntu, todavia no lo he encontrado..
Podeis darme alguna pista?

Aquí las reglas las debes

Aquí las reglas las debes crear tú mismo. Por eso el compañero herje nos muestra un script con dichas reglas. Después metes el script en /etc/init.d/ y creas los enlaces en los runlevels oportunos.

man update-rc.d

saludos

PD por cierto, dale permisos de ejecución a ese script: sudo chmod +x script

PD2 este post deberia estar en el subforo seguridad
_______________________________________
Polo Norte

No me sirve estas reglas en la version mas reciente de Ubuntu!

trato de hacer esta receta en mi maquina que tiene la versión mas reciente de Ubuntu y me dice yá está en la version mas reciente de iptables y no la toma por favor actualizar esta informacion. Gracias

forward del puerto 80 a una makina de mi red

EStyo recontra happy con UBUNTU 5.10, pero tengo un unico problema al intentar hacer un forward de puertos del puerto 80 de mi compu con conexion directa a internet al puerto 80 de una compu de mi red privada
este es el crip que hice, pero parece no funcionar:

#!/bin/sh
echo -n Aplicando Reglas de Firewall
##FLUSH
sudo iptables -F
sudo iptables -X
sudo iptables -Z
sudo iptables -t nat -F
##Politica por defecto
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -P PREROUTING ACCEPT
sudo iptables -t nat -P POSTROUTING ACCEPT

#REDIRECCIONES eth0= internet, eth1= local
#todo lo que venga del exterior y vaya al puerto 80 lo redirigimos a u na maquina interna
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.2:80
#Acceso de redlocal al exterior
sudo iptables -A FORWARD -s 192.168.0.0/24 -i eth1 -p tcp --dport 80 -j ACCEPT
sudo bash -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

y cuando ejecuto iptables -L -n sales esto:
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.0.0/24 0.0.0.0/0 tcp dpt:80

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

que seguna mi entender esta recontra mal..jaja espero contar con ayuda si lo consigo franakamente me quedo con UBUNTU forever..jejeje adios redhat jajajajijijij

SI FUNCIONA

Con esta regla, pero para probar ke funcione se tiene ke hacer la solicitud http o de lo ke sea desde un lugar desde afura de la redprivada y de la misma makina que hace el ruteo, osea desde cualkier compu de internet
### Port Forwarding ###
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2:80

Para instalar el paquete Iptables

trato de instalar iptables y me dice lo siguiente:

E: No se pudo bloquear /var/lib/dpkg/lock - open (11 Recurso no disponible temporalmente)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

Inicio de sesión

Encuesta

¿Qué entorno gráfico prefieres usar? ¿Por qué?
Unity
22%
Gnome 3
23%
Gnome classic
39%
Kde
6%
Xfce
4%
Enligthenment
1%
Lxde
2%
Otro - Especificar
2%
¿Entorno gráfico? Ninguno, ¡solo uso la consola!
2%
Total de votos: 1056