Reglas iptables de un servidor para que comparta internet con dnsmasq [Solucionado]

Imagen de Scorpyo82
-2 puntos

Buenas a todos.

Tengo un servidor con políticas de seguridad restrictivas en iptables.

Las reglas son las siguientes:
(Las tomé de una página en la que explican como funcionan y que decían que esta era buena forma de limitar el acceso a un server)

r2d2@server:~$ sudo iptables -S
[sudo] password for r2d2: 
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N fail2ban-ssh
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport XXXXX -j ACCEPT 
-A INPUT -p tcp -m multiport --dports XXXXX -j fail2ban-ssh 
-A INPUT -i eth1 -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --sport 8080 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -j REJECT --reject-with icmp-port-unreachable 
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 8080 -j ACCEPT 
-A fail2ban-ssh -j RETURN 

Nota, las XXXXX las he puesto para no mostrar el puerto de ssh.

El caso es que ese server lo uso como puente para conectarme a internet.

Al meterle esas reglas dejo de tener internet.
Aunque le añada esta regla NAT:

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0.0.0.0/0 -j MASQUERADE

Supongo que no estará del todo bién, lo que yo quiero hacer con esa regla es que cualquier dispositivo de la red LAN pueda conectarse a internet a través el server.

¿Cual puede ser el problema?

Un saludo y gracias a todos.

Imagen de Firecold
+1
0
-1

Compañero solo por curiosidad de que pagina hablas, quisiera poder leer el contenido, por lo demas te dejo el enlace de un firewall con iptables que me ayudaron a hacer hace algun tiempo, el cual vengo usando desde entonces. aqui el enlace: http://www.ubuntu-es.org/node/159706

en este puedes agregar o quitar los puertos o servicios que desees aceptar o denegar, y claro lo puedes modificar a tu gusto, cualquier problema avisa sera un gusto poder ayudar. Saludos

+1
0
-1
Imagen de Scorpyo82
+1
0
-1

Hola, el tema es que lo solucioné ayer pero era muy tarde y no publiqué la solución, la página no la recuerdo pero como me la has pedido voy buscar en el historial que puede que la encuentre.

Un saludo y espera que publico la respuesta...

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Scorpyo82
+1
0
-1

Pues bien lo he solucionado escribiendo regla por regla y probando cada una a ver si funcionaban (se aprende mucho) y me construí un script que ejecuta todas las reglas.

#!/bin/sh

# Borramos todas las reglas actuales de filtrado
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

# Por defecto tiramos todo los paquetes que entran al pc
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Añadimos una regla para fail2ban-ssh
iptables -N fail2ban-ssh

# A tener en cuenta que el servidor se conecta por wlan1 a internet y
# por eth1 a la red local

# Regla de iptables para canalizar  lo que entra por eth1 (red) hacia wlan1 (internet) 
#iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE
# Opción mejorable:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o wlan1 -j MASQUERADE

#Activación de ip_fordward
echo 1 > /proc/sys/net/ipv4/ip_forward

# Comenzamos a filtrar

# Permitimos todo el tráfico de loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Aceptamos todas las conexiones ya establecidas
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Filtramos las conexiones de SSH hacia fail2ban para que de el visto bueno
iptables -A INPUT -p tcp -m multiport --dports 4426 -j fail2ban-ssh
iptables -A fail2ban-ssh -j RETURN

# Permitimos acceso a HTTP y HTTPS (los puertos habituales para un servidor web)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Habilitamos conexiones al puerto 4426 de SSH
iptables -A INPUT -p tcp --dport 4426 -j ACCEPT

# Permito acceso desde la red interna
iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j ACCEPT

# Permito conexiones al puerto 53 (DNS) en la tarjeta que brinda internet
iptables -A INPUT -i eth1 -p udp --sport 68 --dport 67 -m state --state NEW -j ACCEPT
#iptables -A INPUT -i eth1 -s 0.0.0.0/0 -p tcp --dport 53 -j ACCEPT
#iptables -A INPUT -i eth1 -s 0.0.0.0/0 -p udp --dport 53 -j ACCEPT

# Permitimos que se haga ping al server
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT 

# Descomentar para permitir el tráfico HTTP y HTTPS para FORWARD
#iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -p tcp --dport 80 -j  ACCEPT
#iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -p tcp --dport 443 -j ACCEPT

# Descomentar para permitir tráfico para msn
#iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -p tcp --dport 1864 -j  ACCEPT
#iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -p tcp --dport 1863 -j  ACCEPT

El problema que tenía era el siguiente:
Mi server proporciona servicio de DNS y comparte internet a la red lan.
El programa que se encarga de eso es dnsmasq
Pero dnsmasq no podía proporcionar las dns a ningún pc porque esos pc's no cumplían las reglas básicas... no pertenecen a ninguna red local.... (Ya que están solicitando ip y dns)

La solución la encontré aquí:
http://jam.blogsite.org/iptables-politica-por-defecto-drop-excepto-forward/
Y la solución fué añadir esta regla (Que ya está en el script de arriba)

iptables -A INPUT -i lan0 -p udp --sport 68 --dport 67 -m state --state NEW -j ACCEPT

Eso permite conexiones a los puertos por los que proporciona dns dnmasq a las máquinas que piden conexiones nuevas y aún no pertenecen a ninguna red.

Quiero dejarle un mensaje a esa persona ya que en su blog no funcionan los comentarios, ni hay ningún enlace para ponerse en contacto con el, y si algún día pasa por aquí pues que lo lea.

"iptables -A INPUT -i lan0 -p udp --sport 68 --dport 67 -m state --state NEW -j ACCEPT"

Hola, estoy escribiendo mi propio script de iptables, he estaba atascado en que mi servidor me ofrece acceso a internet y tiene servicio dhcp con dnsmasq.

Y llegué a la conclusión a la que llegas tu, el server no me da ip ni dns simplemente porque no me encuentro en el rango de la red ya que, no pertenezco aún a ella....

Todavía no lo he probado pero no podía esperar a probarlo sin antes darte las gracias, y mi mas sincera enhorabuena, llevo 3 días con esto y ya estaba apunto de suicidarme.

La única solución que encontré hasta ahora es poner como rango de ips 0.0.0.0/0 cosa totalmente desaconsejable.

De nuevo gracias.

Un saludo y gracias

PD: Firecold, te busco eso ahora....

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Scorpyo82
+1
0
-1

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.