Hola, primer aporte que hago en esta parte de la comunidad.
Vengo hacer una especie de mini tutorial para iptables, el programa con el cual, podrás armar un buen firewall para tu sistema sin mucho papeleos. Iptables, es un programa que se encarga de manejar paquetes de red en tu sistema a traves del kernel y tomar decisiones basadas en las que le establezcas.
Iniciamos...
Empezamos por hacer una limpieza de las posibles reglas que existan en el sistema y estableciendo las políticas a DROP por defecto. Así, como usuario con privilegios o root, tipiar en la consola los siguientes comandos:
Reiniciamos iptables con esto:
iptables -X // borra las tablas existentes iptables -Z // reinicia el contador de bytes iptables -F // termina de limpiar las reglas, parecida a la primera opcion.
Establecemos la políticas por defecto con esto:
iptables -P INPUT DROP // se establece la politica en negacion para la entrada iptables -P OUTPUT DROP // se establece la politica en negacion para la salida iptables -P FORWARD DROP // se establece la politica en negacion para el reenvio, si tu equipo va funcionar como router
Con esos comandos, hemos reiniciado iptables con todo en cero y sin reglas y con las siguientes reglas, se establecieron las políticas a negación o DROP por defecto. Ahora mismo, el equipo no tiene salida al internet, así como tampoco permite que nada salga. Lo pueden comprobar si quieren.
Esto será lo que vamos a trabajar con las distintas reglas, permitir que dejamos pasar en la entrada entrada y salida en nuestro sistema.
Con estos comandos siguiente habilitamos el acceso total al sistema, a nivel local:
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -i lo -j ACCEPT
Si tienen a conky instalado, se darán cuenta, del cambio con la anterior regla.
Para ganar acceso al internet, haremos lo siguiente:
iptables -A INPUT -p tcp -m tcp --sport http -m conntrack --ctstate ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport http -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
Que ha pasado ahí arriba??
Estamos permitiendo el acceso al internet a través del protocolo tcp haciendo uso del modulo conntrack para manejar el encaminamiento de los paquetes. Esto ofrece mas control a la hora de permitir que hacer y no hacer en nuestro sistema. Aparte que es mas nuevo y moderno que el viejo modulo state.
En la primera regla, dice ESTABLISHED y en la segunda dice NEW,ESTABLISHED. Esto para entenderlo bien hay que mirar el siguiente diagrama:
Que pasa aquí? Pues, como nuestro equipo, quiere salir al internet y tener acceso a la información, lo primero que hace es enviar un paquete SYN, como una petición al servidor que vendría siendo el NEW en la regla OUTPUT con su puerto de destino http=80, el puerto estándar de la navegación web.
Entonces, el servidor responde la petición con un SYN+ACK, que es como quien dice, ok viejo, no hay problema. Ha establecido la conexión, por eso en la regla OUTPUT tiene un ESTABLISHED.
Es entonces, cuando el cliente, o sea tu equipo en este caso, responde con un ACK y el servidor por igual con ACK. Es aquí cuando la regla INPUT entra en acción con un estado en su regla como ESTABLISHED, porque la conexión ya fue establecida previamente, cuando nuestro sistema envió una petición en la regla OUTPUT y que el servidor respondió como buen socio, no hay problema amigo.
Para navegar las paginas seguras o https, simplemente copien las dos reglas de mas arriba, y cambien el http por https.
Para agregar acceso de entrada y salida al servicio de ssh, es casi el mismo el mismo concepto de arriba, solo cambian algunas cosas de posiciones. O sea, solo con mirar el diagrama de arriba, entenderán mejor.
Así, para conectarnos a un equipo remoto que tiene algún servicio de ssh corriendo, simplemente hacemos esto:
nota: fíjense como inicio las reglas aquí, así como también el estado de la conexión.
iptables -A OUTPUT -p tcp --dport ssh -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp --sport ssh -m conntrack --ctstate ESTABLISHED -j ACCEPT
Inicio con el OUTPUT, porque el sistema va salir hacia afuera a preguntar al servidor si es posible establecer al conexión, es entonces que el servidor, responderá que si, no hay problemas y nos enviara el visto bueno. Entonces, al entrar esa nueva conexión a nuestro sistema, lo dejamos pasar con la regla de INPUT como conexión establecida ESTABLISHED.
Donde aparece ssh, como puerto de destino y fuente, pueden cambiarlo por el numero del puerto que tengan configurado, simplemente lo dejo así, porque también funciona de esa manera, aunque estará haciendo uso del puerto estándar, que es el 22.
Si es tu equipo, el que esta corriendo un servidor de ssh, pues simplemente, inviertes las reglas de arriba y listo. También, cambiar ssh, por el puerto que tengas configurado en tu sistema.
Recomiendo que pongan variables a su firewall, para que sea mucho mas fácil trabajarlo.
Aquí dejo un ejemplo del firewall que estoy usando actualmente.
pd: se me olvido mencionar, el siguiente script, funciona mejor en Archlinux, es la distro que uso y es donde he creado el script. Por si en otra distro como Ubuntu, encuentran que algo no funcione, esas primeras variables, simplemente, pongan los datos estaticos, como nombre de al interfaz, la ip por ejemplo.
#!/bin/env bash # -- UTF 8 -- # This script works better on Archlinux. It was made on Archlinux, so if you found something stranger, you've been warned
# Some common variables # Where are these programs?? iptables="$(which iptables)" modprobe="$(which modprobe)" awk="$(which awk)" cut="$(which cut)" ip="$(which ip)"
# Allow to upload CIA's to 3DS system $output -p tcp -m tcp --dport $N3ds_port -s $N3ds_client -m conntrack --ctstate ESTABLISHED $log "N3DS is Working now-OUT: " --log-level 7 $output -p tcp -m tcp --dport $N3ds_port -s $N3ds_client -m conntrack --ctstate ESTABLISHED $ok -m comment --comment "3DS FBI port" $input -p tcp -m tcp --sport $N3ds_port -s $N3ds_client -m conntrack --ctstate NEW,ESTABLISHED $log "N3DS is Working now-IN: " --log-level 7 $input -p tcp -m tcp --sport $N3ds_port -s $N3ds_client -m conntrack --ctstate NEW,ESTABLISHED $ok -m comment --comment "3DS FBI port"
# Allow streaming from internet # Asculta RadioLive.ro $input -p tcp -m tcp --sport $asculta_radio_port -m conntrack --ctstate ESTABLISHED $ok -m comment --comment "Asculta Radio Live" $output -p tcp -m tcp --dport $asculta_radio_port -m conntrack --ctstate NEW,ESTABLISHED $ok -m comment --comment "Asculta Radio Live"
# Allow outgoing connections ssh standard port $output -p tcp --dport ssh -m conntrack --ctstate NEW,ESTABLISHED $ok -m comment --comment "ssh standard (22) port" $input -p tcp --sport ssh -m conntrack --ctstate ESTABLISHED $ok -m comment --comment "ssh standard (22) port"
# To enable, uncomment it #Allow incoming connections ssh standard port #$input -p tcp --sport ssh -m conntrack --ctstate NEW,ESTABLISHED $ok #$output -p tcp --dport ssh -m conntrack --ctstate ESTABLISHED $ok
# Allow to incoming connections through git standar port $input -p tcp --sport git -m conntrack --ctstate ESTABLISHED $ok -m comment --comment "git standard (9418) port" $output -p tcp --dport git -m conntrack --ctstate NEW,ESTABLISHED $ok -m comment --comment "git standard (9418) port"
# Allow ping from out and inside of computer $output -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED $ok $input -p icmp -m conntrack --ctstate ESTABLISHED,RELATED $ok
#Other harderning # Force SYN packets check #$input -p tcp ! --syn -m conntrack --ctstate NEW $drop $input -p tcp -m conntrack --ctstate NEW ! --syn $log "state test" -m comment --comment "state test" $input -p tcp -m conntrack --ctstate NEW ! --syn $drop -m comment --comment "Force SYN packets check"
#Force Fragments packets check $input -f $drop
#Anti-MiM # Linux Iptables Avoid IP Spoofing And Bad Addresses Attacks #From WAN $input -i $active_face -s $internal_ip $drop $output -o $active_face -s $internal_ip $drop
# For debugging, use e.g.: # * tcpdump, to see the packets - run tcpdump on the PCs involved. # * iptables rate-limited logging, to gain insight into how the iptables rules are working. E.g.:
Dejo mi aporte por si os sirve, en algún momento cuando usé iptables, ahora prefiero firewalld menos complicaciones. Supuestamente en un futuro iptables desaparecerá.
#Establecer drop para todas las cadenas, para una mayor seguridad iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP
#sobre versiones 1.4.x iptables no permite usar la tabla nat para filtrado #iptables -t nat -P PREROUTING DROP #iptables -t nat -P POSTROUTING DROP
#Permitir toda la entrada y salida de paquetes a traves de la interfaz lo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -j ACCEPT
#Permitir una conexion remota (ssh) a traves del cliente 192.168.1.10 iptables -A INPUT -i eth1 -s 192.168.1.0/24 -d 192.168.1.1 -p tcp --dport 2222 -j ACCEPT iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -s 192.168.1.1 -p tcp --sport 2222 -j ACCEPT
#Reglas de nat para lan y dmz iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j SNAT --to 10.0.2.15 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j SNAT --to 10.0.2.15
#Dnat para los servicios de la DMZ iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.10.10:80 iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.10.10:443
#Acceder a los servicios dmz desde la lan, mediante el reenvio de conexiones. iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -o eth2 -d 192.168.10.10 -p tcp --dport 80 -j ACCEPT
Tendre que hechar un ojo tranquilamente a ese frontend que haz puesto y mirar que puedo aprender de el. Pero es esencial, desde mi punto de vista, saber como trabaja el core por debajo iptables, para entonces a traves de un frontend contruir reglas como si fuera cantando una cancion.
Ahora mismo, iptables aun le queda mucha vida en el entorno familiar, pero estoy mirando tambien ipset, que es su reemplazo a futuro.
Por ahora, estoy usandolo en conjunto con iptables, para bloquear ciertas ip malignas que hay por la red.
Newton
happycoder
4.699 mensajes desde oct 2000 en Delante del PC
Editado 1 vez. Última: 3/10/2016 - 16:45:56 por Newton.
Tendre que hechar un ojo tranquilamente a ese frontend que haz puesto y mirar que puedo aprender de el. Pero es esencial, desde mi punto de vista, saber como trabaja el core por debajo iptables, para entonces a traves de un frontend contruir reglas como si fuera cantando una cancion.
Ahora mismo, iptables aun le queda mucha vida en el entorno familiar, pero estoy mirando tambien ipset, que es su reemplazo a futuro.
Por ahora, estoy usandolo en conjunto con iptables, para bloquear ciertas ip malignas que hay por la red.
Asi es. Aunque en mi caso, fue mas la motivacion de aprender el como funcionan algunas cosas en Linux. Estoy pensando en comprarme algunas raperipi para tenerlas como firewall+router+dnscache+webcache.
Todos esos servicios, solo para experimentar un poco
Como experimento didáctico trabajar con tu firewall así es muy constructivo, a la par que latoso.
Yo para mi red doméstica tengo un Ipfire virtualizado con separación de interfaces (roja para Internet, verde para Intranet y naranja para DMZ) y por ahora estoy cubierto, además de que se me hace más práctico el día a día.
hoheiky escribió:Como experimento didáctico trabajar con tu firewall así es muy constructivo, a la par que latoso.
Yo para mi red doméstica tengo un Ipfire virtualizado con separación de interfaces (roja para Internet, verde para Intranet y naranja para DMZ) y por ahora estoy cubierto, además de que se me hace más práctico el día a día.
Si pero hay casos, donde ipfire no llega, como una rasperipi. Es por esa mi intencion de hacer este minituto.
Pero me falta mirar esa minidistro, para aprender un poco la separacion de interfaces, para ver como lo hace exactamente y el manejo de las quotas de internet
Pero ante todo, este tutorial, fue hecho como material didactico de aprendisaje y posiblemente, como alguna referencia futura para alguien que lo necesite.
hoheiky escribió:Como experimento didáctico trabajar con tu firewall así es muy constructivo, a la par que latoso.
Yo para mi red doméstica tengo un Ipfire virtualizado con separación de interfaces (roja para Internet, verde para Intranet y naranja para DMZ) y por ahora estoy cubierto, además de que se me hace más práctico el día a día.
Si pero hay casos, donde ipfire no llega, como una rasperipi. Es por esa mi intencion de hacer este minituto.
Pero me falta mirar esa minidistro, para aprender un poco la separacion de interfaces, para ver como lo hace exactamente y el manejo de las quotas de internet
Pero ante todo, este tutorial, fue hecho como material didactico de aprendisaje y posiblemente, como alguna referencia futura para alguien que lo necesite.
Pues después de pfsense, de lo mejor que he probado, te la recomiendo.
Por otra parte, enhorabuena por el trabajo y el hilo, seguro que a muchos nos servirá de referencia rápida.
hoheiky escribió:Como experimento didáctico trabajar con tu firewall así es muy constructivo, a la par que latoso.
Yo para mi red doméstica tengo un Ipfire virtualizado con separación de interfaces (roja para Internet, verde para Intranet y naranja para DMZ) y por ahora estoy cubierto, además de que se me hace más práctico el día a día.
Si pero hay casos, donde ipfire no llega, como una rasperipi. Es por esa mi intencion de hacer este minituto.
Pero me falta mirar esa minidistro, para aprender un poco la separacion de interfaces, para ver como lo hace exactamente y el manejo de las quotas de internet
Pero ante todo, este tutorial, fue hecho como material didactico de aprendisaje y posiblemente, como alguna referencia futura para alguien que lo necesite.
Pues después de pfsense, de lo mejor que he probado, te la recomiendo.
Por otra parte, enhorabuena por el trabajo y el hilo, seguro que a muchos nos servirá de referencia rápida.
Yo barajaba la misma opcion que @1985a la raspberry y meterle ipfire para enlazar con la oficina con vpn pero al hacerme con ella y trastear un poco simplemente con apt update & apt upgrade me di cuenta que se quedaba corta en velocidad de acceso al disco o sd y que el ethernet son 100mb y por 10 euros mas que lo que cuesta la raspberry con los accesorios indispensable para funcionar me hice con un wintel cx-w8 (suele venir con windows 10 y android) borre todo lo que traia le meti el pfsense y enlace con la oficina tan contento es una maravilla por 65 euros que me salio
zuscu
Explota Burbuja!!!!!
957 mensajes desde mar 2005 en Asturias
Editado 1 vez. Última: 18/10/2016 - 08:57:02 por zuscu.
1985a escribió:Si pero hay casos, donde ipfire no llega, como una rasperipi. Es por esa mi intencion de hacer este minituto.
Pero me falta mirar esa minidistro, para aprender un poco la separacion de interfaces, para ver como lo hace exactamente y el manejo de las quotas de internet
Pero ante todo, este tutorial, fue hecho como material didactico de aprendisaje y posiblemente, como alguna referencia futura para alguien que lo necesite.
Pues después de pfsense, de lo mejor que he probado, te la recomiendo.
Por otra parte, enhorabuena por el trabajo y el hilo, seguro que a muchos nos servirá de referencia rápida.
Yo barajaba la misma opcion que @1985a la raspberry y meterle ipfire para enlazar con la oficina con vpn pero al hacerme con ella y trastear un poco simplemente con apt update & apt upgrade me di cuenta que se quedaba corta en velocidad de acceso al disco o sd y que el ethernet son 100mb y por 10 euros mas que lo que cuesta la raspberry con los accesorios indispensable para funcionar me hice con un wintel cx-w8 (suele venir con windows 10 y android) borre todo lo que traia le meti el pfsense y enlace con la oficina tan contento es una maravilla por 65 euros que me salio
Me interesa mucho esto útlimo que has dicho, he estado mirado el wintel cx-w8 y por lo que he visto sólo tiene una tarjeta de Fast Ethernet, en mi caso me interesaría que fuese a Gigabit, ¿cómo lo hiciste? Supongo que montarías una tarjeta USB-Gigabit, ¿o montaste 2?. ¿Qué tal funciona como Firewall y Servidor de VPN al mismo tiempo, se atasca mucho?
Me interesa mucho esto útlimo que has dicho, he estado mirado el wintel cx-w8 y por lo que he visto sólo tiene una tarjeta de Fast Ethernet, en mi caso me interesaría que fuese a Gigabit, ¿cómo lo hiciste? Supongo que montarías una tarjeta USB-Gigabit, ¿o montaste 2?. ¿Qué tal funciona como Firewall y Servidor de VPN al mismo tiempo, se atasca mucho?
Muchas gracias por cualquier aportación.
Un saludo.
ostras pues llevas razón y lo compre creyendo que era 1g y no, son 100 mb. No me di cuenta supongo pues en mi casa la conexion son 30 megas
Pero eso si me va de fabula no esque le de la misma caña que al de la oficina pero con los 3 o 4 equipos que conecto desde casa a la oficina nunca me dio problema
lo mas dificil fue meterle un firmware a la bios para poder instalar sistemas de 64 bits pues no se por que razon venia bloqueado a windows 10 32 bits