Diferencia entre revisiones de «Cortafuegos»
m (Se adiciona un LSB Init Script para que no genere un WARNING al momento de actualizar el rc.d) |
|||
(No se muestran 29 ediciones intermedias realizadas por 8 usuarios) | |||
Línea 1: | Línea 1: | ||
+ | == Descripción == | ||
Un '''cortafuegos''' o firewall es una herramienta que facilita la protección contra intrusos que pretenden acceder a nuestro ordenador sin nuestro consentimiento. | Un '''cortafuegos''' o firewall es una herramienta que facilita la protección contra intrusos que pretenden acceder a nuestro ordenador sin nuestro consentimiento. | ||
− | Existen variedad de cortafuegos en GNU/Linux, en modo texto y en modo gráfico | + | Existen variedad de cortafuegos en GNU/Linux, en modo texto y en modo gráfico. |
− | + | ||
− | + | == Modo gráfico (GUI) == | |
+ | === Firestarter === | ||
+ | El más destacable por su sencillez de manejo es [http://www.fs-security.com/ Firestarter]. | ||
+ | Para instalarlo, lée [[Añadir aplicaciones]]. | ||
+ | |||
+ | == Modo texto (Terminal) == | ||
+ | === Iptables === | ||
Otra opción es utilizar la herramienta iptables. En el siguiente artículo publicado por herje en http://www.ubuntu-es.org/node/422 muestra como hacerlo fácil: | Otra opción es utilizar la herramienta iptables. En el siguiente artículo publicado por herje en http://www.ubuntu-es.org/node/422 muestra como hacerlo fácil: | ||
Para los paranoicos, explico un modo muy simple de implementar iptables con el fin de cerrar todos los puertos que queramos de nuestro pc. | 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 | + | Iptables es un sistema firewall muy potente incluido en el núcleo de Linux y que requiere una serie de conocimientos. Hay cientos de tutoriales en la red. |
+ | Es aconsejable no setear iptables con cualquier script copiado de la red, puesto que iptables está capacitado para dejar tu sistema como se dice en román paladino abierto de piernas (desconozco si el script se hay puesto aquí es bueno o te valdrá a tí... esto es un wiki colectivo y cada red es diferente!!!). Podemos buscar otros scripts muy completos e información del funcionamiento de iptables [http://www.netfilter.org/documentation/HOWTO/es/packet-filtering-HOWTO-7.html en el manual del autor][http://bulma.net/body.phtml?nIdNoticia=1522 en bulma.net], [http://www.packetstormsecurity.org/papers/firewall/iptables.txt aquí (inglés)] y [http://www.malibyte.net/iptables/scripts/fwscripts.html aquí (inglés)], o preguntandole a google. | ||
No obstante me voy a centrar en alguien que puede ser un usuario normal y que desea lo siguiente: | No obstante me voy a centrar en alguien que puede ser un usuario normal y que desea lo siguiente: | ||
Línea 21: | Línea 28: | ||
$ sudo apt-get install -test iptables | $ sudo apt-get install -test iptables | ||
− | + | Ésto nos activará el servicio por defecto. Sólo 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 | + | El script que yo tengo, sin entrar en detalles viene a ser algo así, muy sencillo: |
<nowiki>#!/bin/bash | <nowiki>#!/bin/bash | ||
+ | |||
+ | ### BEGIN INIT INFO | ||
+ | # Provides: defaultdaemon | ||
+ | # Required-Start: $remote_fs $syslog | ||
+ | # Required-Stop: $remote_fs $syslog | ||
+ | # Default-Start: 2 3 4 5 | ||
+ | # Default-Stop: 0 1 6 | ||
+ | # Short-Description: Start daemon at boot time | ||
+ | # Description: Enable service provided by daemon. | ||
+ | ### END INIT INFO | ||
#-s Especifica una dirección de origen | #-s Especifica una dirección de origen | ||
Línea 109: | Línea 126: | ||
− | + | Lógicamente las líneas van juntas. Sólo se aplican las líneas 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 | $ chmod +x firewall.sh | ||
Línea 123: | Línea 140: | ||
$ sudo iptables -L | $ sudo iptables -L | ||
− | que viene a ser algo | + | que viene a ser algo así: |
<nowiki>root@platas:/home/herje # iptables -L | <nowiki>root@platas:/home/herje # iptables -L | ||
Línea 144: | Línea 161: | ||
root@platas:/home/herje #</nowiki> | root@platas:/home/herje #</nowiki> | ||
− | + | Sólo falta hacer que las reglas se carguen al inicio, para ello copiamos el script en /etc/init.d y lo ponemos por default: | |
$ sudo cp firewall.sh /etc/init.d/ | $ sudo cp firewall.sh /etc/init.d/ | ||
Línea 150: | Línea 167: | ||
Y listo con esto tenemos nuestro firewall funcionando. | Y listo con esto tenemos nuestro firewall funcionando. | ||
− | Agradezco cualquier aclaración, complemento etc | + | Agradezco cualquier aclaración, complemento etc. teniendo en cuenta que está pensado para un user casero y sin grandes pretensiones. |
+ | |||
+ | ==== Filtro de mac's con iptables ==== | ||
+ | |||
+ | Últimamente las tecnologías inalámbricas hacen necesario el uso del ''filtro de mac'' como una potente herramienta a la hora de seleccionar a quienes queremos que se conecten a nuestra red inalambrica. Esto sin embargo, no nos asegura que '''no''' puedan tener acceso, lo que si nos asegura es que tendrán que trabajar mucho más, lo que les puede costar lo suficiente como para que dejen de intentarlo. Y sin más, supondremos, para este ejemplo, que la WLAN de nuestro ''computador'' se llama '''ath0''', y que la mac de nuestro ''laptop'' es '''CA:FE:DE:C0:C0''', luego debemos fijarnos que nuestro '''firewal.sh''' contenga lo siguiente (obviamente también debemos fijarnos que en otras cadenas y reglas no interfiramos con lo de a continuación): | ||
+ | |||
+ | # Debemos fijarnos que la política de entrada sea | ||
+ | # '''botar cualquier intento de entrada''' | ||
+ | iptables -P INPUT DROP | ||
+ | iptables -t nat -P PREROUTING DROP | ||
+ | |||
+ | la primera linea es para impedir el acceso a nuestro ''computador'', mientras que la segunda es para impedir el acceso a ''otros computadores'' que formen parte de la red que tenemos acceso, es decir, impedir que nos utilicen como ''puente''. | ||
+ | |||
+ | #Permitimos que salga ''cualquier cosa'' de la WLAN a la red | ||
+ | iptables -A OUTPUT -o ath0 -j ACCEPT | ||
+ | |||
+ | #Solo permitimos que entren las siguientes mac's | ||
+ | iptables -A INPUT -m mac --mac-source CA:FE:DE:C0:C0 -j ACCEPT | ||
+ | iptables -t nat -A PREROUTING -m mac --mac-source CA:FE:DE:C0:C0 -j ACCEPT | ||
+ | |||
+ | Nuevamente, la primera linea es para que tengan acceso a nuestro ''computador'', y la segunda es para permitir el acceso a ''otros computadores'' que formen parte de la red que tenemos acceso, es decir, permitir que nos utilicen como ''puente''. | ||
+ | |||
+ | Ahora bien, si lo que queremos es que desde nuestro ''laptop'', además de podernos conectar a nuestro ''computador'', podamos conectarnos con la red que está conectada a la LAN del ''computador'', que llamaremos '''eth0''', debemos fijarnos además que exista una ''buena'' coneccion entre '''ath0''' y '''eth0''' | ||
+ | |||
+ | #Permitimos todas las conexiones que van desde '''ath0''' hacia '''eth0''' | ||
+ | iptables -A FORWARD -i ath0 -o eth0 -m state --state ! INVALID -j ACCEPT | ||
+ | #Son permitidas sólo las conexiones ya establecidas, o relacionadas con | ||
+ | #las conexiones ya establecidas, que vienen de '''eth0''' y van hacia '''ath0''' | ||
+ | iptables -A FORWARD -i eth0 -o ath0 -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
+ | |||
+ | y luego debemos indicarle al sistema que exista comunicación entre las interfaces de red (podría ser necesario hacer esto cada vez que se reinicie el sistema, por lo que se recomienda su incorporación al script '''firewall.sh''') | ||
+ | |||
+ | $ chmod 666 /proc/sys/net/ipv4/ip_forward | ||
+ | $ echo "1" > /proc/sys/net/ipv4/ip_forward | ||
+ | |||
+ | Por último, lo más probable es que la red que tiene acceso la LAN, '''eth0''' del ''computador'', tenga un firewall que imposibilite la conexión de nuestro ''laptop'', por lo cual debemos enmascarar a nuestro ''laptop'' frente a la red, para ello debemos colocarle una mascara a todo lo que salga de la LAN '''eth0''' | ||
+ | |||
+ | #Todo lo que sale de '''eth0''' se enmascara | ||
+ | iptables -t nat -A POSTROUTING -o ra0 -j MASQUERADE | ||
{{esbozo}} | {{esbozo}} | ||
[[Categoría:Administración del sistema]][[Categoría:Seguridad]] | [[Categoría:Administración del sistema]][[Categoría:Seguridad]] |
Última revisión de 12:37 27 mar 2009
Contenido
Descripción
Un cortafuegos o firewall es una herramienta que facilita la protección contra intrusos que pretenden acceder a nuestro ordenador sin nuestro consentimiento.
Existen variedad de cortafuegos en GNU/Linux, en modo texto y en modo gráfico.
Modo gráfico (GUI)
Firestarter
El más destacable por su sencillez de manejo es Firestarter.
Para instalarlo, lée Añadir aplicaciones.
Modo texto (Terminal)
Iptables
Otra opción es utilizar la herramienta iptables. En el siguiente artículo publicado por herje en http://www.ubuntu-es.org/node/422 muestra como hacerlo fácil:
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 núcleo de Linux y que requiere una serie de conocimientos. Hay cientos de tutoriales en la red. Es aconsejable no setear iptables con cualquier script copiado de la red, puesto que iptables está capacitado para dejar tu sistema como se dice en román paladino abierto de piernas (desconozco si el script se hay puesto aquí es bueno o te valdrá a tí... esto es un wiki colectivo y cada red es diferente!!!). Podemos buscar otros scripts muy completos e información del funcionamiento de iptables en el manual del autoren bulma.net, aquí (inglés) y aquí (inglés), o preguntandole a google. 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:
$ sudo apt-get install -test iptables
Ésto nos activará el servicio por defecto. Sólo 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 así, muy sencillo:
#!/bin/bash ### BEGIN INIT INFO # Provides: defaultdaemon # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO #-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
Lógicamente las líneas van juntas. Sólo se aplican las líneas 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:
$ sudo sh firewall.sh
podemos ver la salida de iptables haciendo:
$ sudo iptables -L
que viene a ser algo así:
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 #
Sólo falta hacer que las reglas se carguen al inicio, para ello copiamos el script en /etc/init.d y lo ponemos por default:
$ sudo cp firewall.sh /etc/init.d/ $ sudo 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.
Filtro de mac's con iptables
Últimamente las tecnologías inalámbricas hacen necesario el uso del filtro de mac como una potente herramienta a la hora de seleccionar a quienes queremos que se conecten a nuestra red inalambrica. Esto sin embargo, no nos asegura que no puedan tener acceso, lo que si nos asegura es que tendrán que trabajar mucho más, lo que les puede costar lo suficiente como para que dejen de intentarlo. Y sin más, supondremos, para este ejemplo, que la WLAN de nuestro computador se llama ath0, y que la mac de nuestro laptop es CA:FE:DE:C0:C0, luego debemos fijarnos que nuestro firewal.sh contenga lo siguiente (obviamente también debemos fijarnos que en otras cadenas y reglas no interfiramos con lo de a continuación):
# Debemos fijarnos que la política de entrada sea # botar cualquier intento de entrada iptables -P INPUT DROP iptables -t nat -P PREROUTING DROP
la primera linea es para impedir el acceso a nuestro computador, mientras que la segunda es para impedir el acceso a otros computadores que formen parte de la red que tenemos acceso, es decir, impedir que nos utilicen como puente.
#Permitimos que salga cualquier cosa de la WLAN a la red iptables -A OUTPUT -o ath0 -j ACCEPT
#Solo permitimos que entren las siguientes mac's iptables -A INPUT -m mac --mac-source CA:FE:DE:C0:C0 -j ACCEPT iptables -t nat -A PREROUTING -m mac --mac-source CA:FE:DE:C0:C0 -j ACCEPT
Nuevamente, la primera linea es para que tengan acceso a nuestro computador, y la segunda es para permitir el acceso a otros computadores que formen parte de la red que tenemos acceso, es decir, permitir que nos utilicen como puente.
Ahora bien, si lo que queremos es que desde nuestro laptop, además de podernos conectar a nuestro computador, podamos conectarnos con la red que está conectada a la LAN del computador, que llamaremos eth0, debemos fijarnos además que exista una buena coneccion entre ath0 y eth0
#Permitimos todas las conexiones que van desde ath0 hacia eth0 iptables -A FORWARD -i ath0 -o eth0 -m state --state ! INVALID -j ACCEPT #Son permitidas sólo las conexiones ya establecidas, o relacionadas con #las conexiones ya establecidas, que vienen de eth0 y van hacia ath0 iptables -A FORWARD -i eth0 -o ath0 -m state --state ESTABLISHED,RELATED -j ACCEPT
y luego debemos indicarle al sistema que exista comunicación entre las interfaces de red (podría ser necesario hacer esto cada vez que se reinicie el sistema, por lo que se recomienda su incorporación al script firewall.sh)
$ chmod 666 /proc/sys/net/ipv4/ip_forward $ echo "1" > /proc/sys/net/ipv4/ip_forward
Por último, lo más probable es que la red que tiene acceso la LAN, eth0 del computador, tenga un firewall que imposibilite la conexión de nuestro laptop, por lo cual debemos enmascarar a nuestro laptop frente a la red, para ello debemos colocarle una mascara a todo lo que salga de la LAN eth0
#Todo lo que sale de eth0 se enmascara iptables -t nat -A POSTROUTING -o ra0 -j MASQUERADE
Este artículo es, por ahora, sólo un esbozo.
Ampliándolo ayudarás a mejorar Guía Ubuntu.