Re: Filtrando mediante IPtables
On Mon, 10 Dec 2001 02:00:34 -0800 (PST)
Deb Ma Il <debmail10@yahoo.com> wrote:
> (me habia equivocado de direccion, hago forward,
> espero que llegue en condiciones y no os hagais un lio
> con los quotes O:-)
Sí es un poco de lío pero lo conseguiremos...
> > > > iptables -t nat -A POSTROUTING -o lo -j SNAT \
> > > --to-source MI_IP
> > En principio el firewall no tiene usuarios "internos", todo se
> > realiza desde fuera. Por tanto no tengo usuarios que puedan
> > utilizar Gnutella o Morpheus...
Si no tienes clientes internos, no necesitas hacer SNAT. Puedes
eliminar esta regla. Tampoco necesitas nada de forward.
> > No se si te referias a esto... De todas maneras,
> > _esto
> > lo pondrias en otro sitio? _Reordenarias las cadenas
> > de otra manera? _Lo pongo al final de todo?
Bueno, generalmente es buena idea ordenar los comandos siguiendo
alguna lógica. Lo que yo hago es empezar por la default policy, y sigo
según orign de los packets: primero todo tráfico que viene de la misma
máquina, entonces el tráfico que viene de la red interna (que no
tienes) y finalmente el tráfico que viene de la Internet. Y dentro de
estos capítulos lo ordeno así como el packet atraviesa las tablas y
cadenas. Por ejemplo, si quieres cojer tu correo con el POP, tu
máquina mandará un packet que llega a eth0, va a ser evaluado por
nat-prerouting, entonces por la decisión de ruteo, seguido por la
table filter (o input o forward), y, en caso de forward, por un
nat-postrouting. Así es más difícil escribir una regla que va a
invalidar otra que viene mas tarde. No digo que se el único ni el
mejor esquema, pero por lo menos es un esquema.
> > > Continuamos en la tabla filter, en su cadena
> > > FORWARD.
> > > > iptables -A FORWARD -p tcp ! --syn -m state
> > > --state NEW \
> > > > -j LOG --log-prefix "New not syn:"
[...]
> > Exactamente, el trafico originado en el firewall es
> > minimo, del firewall no cuelga ningun ordenador y
> > este
> > no tiene ningun usuario "interno".
> >
> > > > iptables -A FORWARD -p tcp ! --syn -m state
> > > --state NEW -j DROP
> > > No consigo ver el objetivo de esto. _Est_s
> > > descartando todos los
> > > packets que no sean el primero! _Est_s segura que
> > > esto te funciona?
> > > [*]
> >
> > Respondiendo tamnbien al [*], Ok, quitare entonces
> > esto mejor... O:-)
Si. Como no tienes clientes internos no necesitas nada de forward ni
de SNAT.
> > > > iptables -A FORWARD -i eth0 -j ACCEPT
> > > Esta regla va a acceptar todos los PRIMEROS
> > packets
> > > que vienen de
> > > eth0 (supongo que la tarjeta para la red interna);
> > > como ya descartaste
> > > los packets que vendr_n a continuaci_n, no
> > llegar_n
> > > a ser evaluados
> > > por esta regla. Recuerda que nat-prerouting viene
> > > antes.
> >
> > eth0 es la tarjeta de red que conecta el ordenador
> > con
> > Internet (y es unica, el firewall no hace de proxy a
> > una red interna).
forward (`pasar al siguiente', `encaminar') se usa si viene algo por
un lado y necesitamos mandarlo para otro. Como sólo hay `un lado', no
lo necesitas para nada.
> > > > iptables -A FORWARD -m state --state
> > > ESTABLISHED,RELATED -j ACCEPT
Ditto. Para hacer tu firewall stateful, te deberia bastar:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Estas dos reglas deberían ser mas o menos las primeras de cada
cadena. Si haces
iptables -t filter -L
(-t filter es opcional), te mostrará las reglas que tienes en el orden
en que van a ser evaluadas.
> > > > iptables -A allowed -p TCP -m state --state
> > > ESTABLISHED,RELATED -j ACCEPT
> > > Esto ya lo comprobaste para la cadena FORWARD de
> > la
> > > table
> > > filter. _Porque no lo definista antes y saltas a
> > > "allowed" ya ahi?
> >
> > Pues ni idea, me lo mirare mejor, con tus
> > comentarios
> > he visto un poco mas la luz O:-)
Una tabla nueva con sólo una regla no vale la pena; el kernel va a
trabajar mas de la cuenta.
> > Ok. Pero, (para los ICMP), si el ordenador no tiene
> > usuarios, _vale la pena que abra mas tipos ICMP?
No es cuestión de que valga la pena, sino que tienes que respectar las
normas. Y sí vale la pena; un mensaje ICMP puede evitar que otra
máquina de fuera espere a un timeout o reintente contantemente alguna
cosa que no funciona de cualquier forma. Hay los que piensan que
esconder el ping es `cool', pero sirve de poco. Si estoy en la misma
red, no puedes evitar que descubra tu dirección MAC:
# ping broadcast_a_la_red_local
( sin respuesta )
# ip neigh ls
( ya tengo tu IP y la dirección de tu tarjeta de red)
A partir de este momento, puedo escanear todos los puertos e intentar
atacar tu máquina. Si no estoy en la misma red, todavía puedo
`adivinar'. Por ejemplo, un "nmap -P0 tu_IP" me va a decir todos los
puertos que tengas abiertos. Si respondes al ping, tal vez ni miro la
MAC. Te recomiendo:
... -p icmp -j ACCEPT
> > > > iptables -A tcp_packets -p TCP -s X.Y.0.0/16
> > > --dport 25 -j allowed
> > Aqui tengo un problema. En el servidor tengo instalado el Mailman
> > (el servidor de listas). Hoy he descubierto que con esta
> > configuracion del firewall (ya que antes, cuando no tenia el
> > firewall, creo que no pasaba) solo llegan a las listas los mails
> > enviados desde la universidad. Todo lo que se origina fuera no
> > llega. _Tiene algo que ver con esta restriccion? _O es problema
> > de la configuracion del Postfix?
Lo estás restringindo explícitamente a X.Y.0.0/16. Como la default
policy es DROP, no puede ser de otra forma. Normalmente, el puerto 25
es público, es decir que cualquiera puede mandarte un mensaje, y es
responsabilidad del SMTP (en tu caso postfix) de no acceptar los
mensajes incorrectos.
> > Si es problema de esta restriccion, _como hago para que el SMTP
> > solo se pueda utilizar desde dentro de la universidad pero el
> > Mailman pueda recibir (y reenviar) mails enviados desde fuera?
Sólo lo puedes discriminar en postfix. Netfilter es un filtro de
packets, que no tiene conocimiento del contenido o de los datos. No
puede saber si mando un mensaje particular a tí, o si lo mando a la
lista configurada con mailman.
> > > > iptables -A tcp_packets -p TCP -s 0/0 --dport 80
> > > -j allowed
> > > > iptables -A tcp_packets -p TCP -s 0/0 --dport
> > 110
> > > -j allowed
> > > > iptables -A udpincoming_packets -p UDP -s 0/0
> > > --source-port 53 -j ACCEPT
> > > > iptables -A udpincoming_packets -p UDP -s 0/0
> > > --source-port 2074 -j ACCEPT
> > > Si tienes un DNS corriendo, tambi_n necesitar_s el
> > > 53 en tcp. No
> > > conozco el 2074.
> >
> > No tengo DNS, asi que lo quito :-)
Hm. No lo puedes quitar del todo, por lo menos el udp lo necesitas,
sino el firewall no podría resolver los nombres. Por otra parte, yo
normalmente permito todo tráfico que origina en el firewall (eso es:
"-s lo" ó "-s eth0")
> > El 2074 ni idea ahora mismo, seguramente me lo copie
> > del IPtables HOWTO.
Esto es el motivo porque no creo ni en firewalls de Norton por $49 ni
por los scripts milagrosos que `saben exactamente lo que yo quiero'.
> > > > iptables -t nat -A PREROUTING -i eth0 -s
> > > 192.168.0.0/16 -j DROP
> > > > iptables -t nat -A PREROUTING -i eth0 -s
> > > 10.0.0.0/8 -j DROP
> > > > iptables -t nat -A PREROUTING -i eth0 -s
> > > 172.16.0.0/12 -j DROP
> > > Antes has escrito:
> > > iptables -A FORWARD -i eth0 -j ACCEPT
> > > Con estas reglas invalidas la anterior, porque la
> > > cadena PREROUTING es
> > > lo primero que se toca (DROP) y la cadena FORWARD
> > de
> > > la tabla filter
> > > ni va a ver este packet.
> >
> > eth0 es la conexion que tiene el ordenador con
> > Internet, no hay otra interfaz.
> >
> > Entonces la cadena anterior sobra, _no?
Sobra del todo, porque no necesitas ni forward ni nat.
Si un packet viene y es descartado porque deve, no necesitas ningún
log, porque el firewall habrá hecho lo que debe. Pero te recomiendo
que coloques un log al final de todas las tablas, porque entonces
puedes ver en los logs aqueles packets que fueron descartados por la
default policy DROP. Esto te puede explicar lo que no funciona pero
debería funcionar.
> > > _Este te funciona?
> >
> > Funciona con los problemas ya comentados:
> >
> > 1. No responde a los pings
Porque los tienes filtrados. Permite el paso a cualquier cosa que
tenga "-p icmp".
> > 2. Cuando hago un scaneado de puertos desde fuera no
> > muestra los puertos abiertos
Esto se debe a que lo que ya vimos.
> > 3. Los mails enviados desde fuera de las IPs de la
> > universidad a listas gestionadas por el Mailman no
> > llegan.
Yo creo que ningún email llega desde fuera. Ni a la lista ni a una
cuenta en particular. Y también creo que no te funciona el servidor
web (puerta 80).
> > Bueno, a ver si mis comentarios en este mail ayudan
> > un
> > poco mas :-)
Yo creo, que para hacer un firewall, incluso tan simple como este,
debes intentar entender lo que hace. Copiar ciegamente no funciona
bien. Te recomiendo, que te hagas un esquema y que intentes
implementarlo paso a paso.
--
Christoph Simon
ciccio@kiosknet.com.br
---
^X^C
q
quit
:q
^C
end
x
exit
ZZ
^D
?
help
.
Reply to: