P r á c t i c a 1 5 C o n f i g u r a c i ó n d e f i r e w a l l m e d i a n t e i p t a b l e s Configuración del firewall 1. Conéctate a tu máquina virtual Centos y utiliza la cuenta de root. 2. Crea una nueva cadena llamada PERSONALIZADO. 3. Haz que todos los paquetes que lleguen a la cadena INPUT vayan a la cadena PERSONALIZADO. 4. Agrega una regla en la cadena PERSONALIZADO para que todos los paquetes sean rechazados con el motivo icmp-host-unreachable. Si estabas conectado por putty a centos comprobarás que te has quedado sin conexión. Comprueba que no puedes hacer un ping a tu máquina centos desde ubuntu y comprueba que el mensaje que obtienes es el que nosotros hemos establecido. 5. Muestra las reglas del firewall con el número de línea asociado. Elimina la regla que acabamos de añadir y en su lugar añade una en PERSONALIZADO que haga que se descarten todos los paquetes sin dar ningún motivo. Prueba a hacer ping ahora desde la máquina ubuntu a centos. Salva las reglas del firewall. 6. Añade una regla encima de la que acabamos de configurar de tal forma que todas las conexiones que se vayan a rechazar desde la máquina centos se registren en el log. Prueba a hacer un telnet desde ubuntu al puerto 22 de centos y comprueba en el log de la máquina centos (/var/log/messages) que se están registrando los intentos de conexión. 7. Intenta conectarte desde centos al puerto 25 de tu propia máquina centos. Comprobarás que no es posible realizar la conexión. Crea una nueva regla en PERSONALIZADO para permitir todas las conexiones que utilicen la interfaz de red de loopback (lo), es decir, todas las conexiones que se produzcan desde la propia máquina y vayan a la propia máquina. Prueba a hacer el telnet ahora. Salva las reglas del firewall. 8. Añade las reglas necesarias a la cadena PERSONALIZADO de tal forma que se permitan las conexiones por ssh a la máquina centos desde cualquier equipo de tu red. Para crear las reglas necesitarás saber los puertos utilizados por el servicio ssh así como el protocolo que utilizan. Comprueba que funciona correctamente intentando conectarte por ssh a tu máquina centos. 9. Añade una regla a la cadena PERSONALIZADO de tal forma que se permita hacer ping a la máquina centos a todos los equipos. Comprueba que puedes hacer ping desde tu equipo físico. Salva las reglas del firewall. Administración de sistemas de software libre. Práctica 15 1
10. Añade las reglas necesarias a la cadena PERSONALIZADO de tal forma que se permita hacer ftp a la máquina centos desde cualquier equipo. Comprueba que puedes hacer ftp desde tu equipo físico. 11. Añade las reglas necesarias a la cadena PERSONALIZADO de tal forma que se permitan las conexiones al servicio samba desde cualquier equipo de tu red. Necesitarás consultar los puertos en los que está escuchando samba (smb) y (nmb). Comprueba que puedes acceder desde tu máquina ubuntu mediante smbclient -U pedro //centos/rrhh. Si no recuerdas la contraseña del usuario pedro puedes asignarle otra mediante smbpasswd. Salva las reglas del firewall. 12. Añade las reglas necesarias a la cadena PERSONALIZADO de tal forma que puedas acceder desde cualquier equipo de la red al servicio cups de la máquina centos. Necesitarás comprobar los puertos que utiliza cups. Comprueba que funciona correctamente intentando acceder a la interfaz web de cups desde tu equipo físico. 13. Añade las reglas necesarias a la cadena PERSONALIZADO para permitir el acceso a cualquier equipo a los puertos utilizados por apache. Comprueba que funciona correctamente intentando acceder desde el navegador a https://www.cursosl.com. Salva las reglas del firewall. 14. Añade una regla a la cadena PERSONALIZADO para permitir a cualquier equipo de tu red acceder al servicio dns de tu equipo centos. El servicio utiliza el puerto 53/tcp y 53/udp. Para comprobar que funciona correctamente prueba a preguntar por dns.cursosl.com desde tu máquina centos. 15. Comprueba el puerto utilizado por squid y permite el acceso al mismo a todos los equipos de la red añadiendo una regla a la cadena PERSONALIZADO. Comprueba que funciona intentando visualizar cualquier página desde tu máquina centos. te ha dejado? No debería dejarte. Para solucionar el problema deberás añadir una regla a la cadena PERSONALIZADO para que se acepten todas las conexiones con estado ESTABLISHED y RELATED. Comprueba que funciona. Asegúrate de que esta regla permanece como la primera del firewall a partir de ahora. Salva las reglas del firewall. 16. Añade las reglas necesarias a la cadena PERSONALIZADO de tal forma que se permita la conexión desde cualquier equipo de la red a los puertos utilizados por postfix (master) y dovecot. Para comprobar que funciona correctamente prueba a hacer telnet a cualquiera de los puertos. 17. Crea una regla de tal forma que cuando cualquier equipo de la red intente acceder a través del navegador a la ip de la máquina centos al puerto 80/tcp se le redirija al puerto 631 y vea por lo tanto la interfaz web de cups. Averigua a qué tabla y a qué cadena debes añadir la regla para que funcione correctamente. Comprueba que funciona correctamente. Guarda las reglas del firewall. 18. Añade una regla para rechazar todas las conexiones que se produzcan desde la máquina centos y tengan como destino el puerto 80/tcp de cualquier equipo. Comprueba que no puedes acceder a ninguna página web desde tu máquina centos. Administración de sistemas de software libre. Práctica 15 2
19. Añade una regla para no permitir a la máquina centos realizar consultas dns. Comprueba que al preguntar por la ip de www.google.es no se te da respuesta. Guarda las reglas del firewall. 20. Modifica la política por defecto de la cadena OUTPUT de manera que se descarten todos los paquetes. Prueba a hacer un ping a la máquina ubuntu. 21. Vuelve a cambiar la política por defecto de la cadena OUTPUT a ACCEPT. Agrega una regla de tal forma que se rechacen todos los paquetes que vayan a cualquier red distinta de la red en la que se encuentran las máquinas virtuales. Asegúrate de que esta regla es la primera. Prueba a hacer un ping a www.google.es y después a la ip de tu máquina ubuntu. Guarda las reglas del firewall. 22. Elimina todas las reglas de la cadena OUTPUT. Prueba a hacer ping a www.google.es ahora. Muestra todas las reglas de la tabla filter de forma detallado y mostrando las ips en lugar de los nombres asociados a cada ip. 23. Elimina la regla de la cadena PERSONALIZADO que registra los eventos(log). Vuelve a mostrar las reglas del firewall para comprobar que ya no está. Guarda las reglas del firewall. 24. Deshabilita el servicio iptables y haz que no arranque con el inicio del sistema. Solución 1. Accedemos a la máquina vía putty o bien a través de la propia terminal que lleva incorporada y usamos la cuenta de root: su - 2. Creamos la nueva cadena: iptables -N PERSONALIZADO 3. Creamos la regla que haga que todo lo que vaya a INPUT se redirija a PERSONALIZADO: iptables -A INPUT -j PERSONALIZADO 4. Agregamos la regla: iptables -A PERSONALIZADO -j REJECT --reject-with icmp-hostunreachable Administración de sistemas de software libre. Práctica 15 3
Si probamos a hacer un ping desde ubuntu a centos: ping centos Comprobamos que efectivamente obtenemos la respuesta "host unreachable" tal y como habíamos configurado. 5. Mostramos las reglas existentes en el firewall: iptables --line -L Comprobamos que la regla añadida ocupa la posición 1 de la cadena PERSONALIZADO. Eliminamos la regla que acabamos de añadir: iptables -D PERSONALIZADO 1 A continuación añadimos una regla que haga que se descarten todos los paquetes en lugar de rechazarlos: iptables -A PERSONALIZADO -j DROP Probamos a hacer ping desde ubuntu a centos: Comprobamos que no responde nada la máquina centos. De esta forma conseguimos ganar seguridad y ancho de banda. Administración de sistemas de software libre. Práctica 15 4
A continuación salvamos las reglas del firewall: 6. Insertamos la regla justo encima de la ya existente: iptables -I PERSONALIZADO -j LOG OJO Asegúrate de que utilizas -I y no -A para insertarla encima o de lo contrario no funcionará, el orden es importante A continuación probamos a hacer un telnet desde la máquina ubuntu: telnet centos 22 Si comprobamos el log en la máquina centos: tail /var/log/messages Comprobamos que se registra una conexión con origen ubuntu (SRC=10.0.0.72) y con destino centos (DST=10.0.0.71) 7. Si intentamos hacer un telnet a localhost: telnet localhost 25 Comprobamos que no nos está permitido. A continuación insertamos la nueva regla en el firewall: iptables -I PERSONALIZADO -i lo -j ACCEPT Administración de sistemas de software libre. Práctica 15 5
Si probamos a hacer el telnet ahora: telnet localhost 25 A continuación salvamos las reglas del firewall: 8. Lo primero que hacemos es comprobar en qué puerto o puertos está escuchando el servicio ssh: netstat -lnp grep ssh Comprobamos que utiliza el puerto 22/tcp. A continuación, añadimos la regla al firewall para permitir realizar la conexión al servicio ssh a cualquier equipo de la red: iptables -I PERSONALIZADO -s 10.0.0.0/255.255.255.0 -p tcp -- dport 22 -j ACCEPT (modificar la ip de la red por la de tu red) A continuación si probamos a conectarnos desde el equipo físico usando putty a la máquina centos comprobaremos que no hay ningún problema. 9. Añadimos una regla que permita todos los paquetes de tipo icmp: iptables -I PERSONALIZADO -p icmp -j ACCEPT (modificar la ip de la red por la de tu red) Administración de sistemas de software libre. Práctica 15 6
A continuación, si probamos a hacer ping desde nuestra máquina física: Comprobamos que no tenemos ningún problema. A continuación salvamos las reglas del firewall: 10. Comprobamos los puertos usados por ftp: netstat -lnp grep ftp A continuación introducimos la regla: iptables -I PERSONALIZADO -p tcp --dport 21 -j ACCEPT Comprobamos que podemos hacer ftp a la máquina centos después del cambio: ftp 10.0.0.71 (modifica la ip por la de tu máquina centos) 11. Consultamos los puertos utilizados por el servicio samba: netstat -lnp grep smb Administración de sistemas de software libre. Práctica 15 7
netstat -lnp grep nmb Una vez que sabemos los puertos en los que está escuchando el servicio, incorporamos las reglas al firewall: iptables -I PERSONALIZADO -s 10.0.0.0/255.255.255.0 -p tcp -- dport 139 -j ACCEPT iptables -I PERSONALIZADO -s 10.0.0.0/255.255.255.0 -p tcp -- dport 445 -j ACCEPT iptables -I PERSONALIZADO -s 10.0.0.0/255.255.255.0 -p udp - -dport 137 -j ACCEPT iptables -I PERSONALIZADO -s 10.0.0.0/255.255.255.0 -p udp - -dport 138 -j ACCEPT (modifica los valores con los de tu red) Ahora si intentamos acceder a centos usando el cliente samba comprobaremos que no tenemos ningún problema: smbclient -U pedro //centos/rrhh A continuación salvamos las reglas del firewall: Administración de sistemas de software libre. Práctica 15 8
12. Comprobamos los puertos en los que está escuchando cups: netstat -lnp grep cups A continuación establecemos las reglas en el firewall: iptables -I PERSONALIZADO -s 10.0.0.0/255.255.255.0 -p tcp -- dport 631 -j ACCEPT iptables -I PERSONALIZADO -s 10.0.0.0/255.255.255.0 -p udp - -dport 631 -j ACCEPT (modifica los valores con los de tu red) A continuación si pruebas a acceder a la interfaz web de cups desde tu equipo físico comprobarás que no tienes ningún problema: (modifica la ip por la de tu máquina centos) 13. Comprobamos los puertos utilizados por apache: netstat -lnp grep http Administración de sistemas de software libre. Práctica 15 9
Añadimos las reglas en cuestión: iptables -I PERSONALIZADO -p tcp --dport 200 -j ACCEPT iptables -I PERSONALIZADO -p tcp --dport 443 -j ACCEPT Probamos a acceder a la web configurada en apache a través del navegador https://www.cursosl.com: Salvamos las reglas del firewall: 14. Añadimos las reglas: iptables -I PERSONALIZADO -s 10.0.0.0/255.255.255.0 -p tcp -- dport 53 -j ACCEPT iptables -I PERSONALIZADO -s 10.0.0.0/255.255.255.0 -p udp - -dport 53 -j ACCEPT (modifica las ips por las de tu red) Comprobamos que las reglas funcionan correctamente: ping dns.cursosl.com Administración de sistemas de software libre. Práctica 15 10
15. Comprobamos el puerto utilizado por squid: cat /etc/services grep squid Añadimos la regla a la cadena PERSONALIZADO: iptables -I PERSONALIZADO -s 10.0.0.0/255.255.255.0 -p tcp -- dport 3128 -j ACCEPT Si probamos a visualizar cualquier web desde centos comprobaremos que no es posible. Añadimos la regla para permitir las conexiones con estado ESTABLISHED O RELATED: iptables -I PERSONALIZADO -m state --state ESTABLISHED,RELATED -j ACCEPT A continuación si probamos a visualizar cualquier web desde la máquina centos comprobaremos que no tenemos ningún problema: Guardamos las reglas del firewall: 16. Comprobamos los puertos en los que están escuchando los servicios: netstat -lnp grep master Administración de sistemas de software libre. Práctica 15 11
netstat -lnp grep dovecot Una vez que sabemos los puertos que debemos desbloquear, añadimos las reglas al firewall asegurándonos de que se insertan debajo de la regla que comprueba el estado de las conexiones: iptables -I PERSONALIZADO 2 -s 10.0.0.0/255.255.255.0 -p tcp --dport 25 -j ACCEPT iptables -I PERSONALIZADO 2 -s 10.0.0.0/255.255.255.0 -p tcp --dport 995 -j ACCEPT iptables -I PERSONALIZADO 2 -s 10.0.0.0/255.255.255.0 -p tcp --dport 993 -j ACCEPT (cambia las ips por las correspondientes para tu red) Si probamos a hacer telnet al puerto 25 por ejemplo comprobamos que funciona correctamente: telnet 10.0.0.71 25 (modifica la ip por la de tu máquina centos) 17. Para que funcione correctamente deberemos añadir la regla a la cadena PREROUTING: iptables -t nat -A PREROUTING -s 10.0.0.0/255.255.255.0 -p tcp --dport 80 -j DNAT --to :631 Si probamos a acceder a la ip de la máquina centos desde un navegador comprobaremos que se nos redirige a la interfaz web de cups: Administración de sistemas de software libre. Práctica 15 12
Guardamos las reglas del firewall: 18. Añadimos la regla en cuestión a la cadena OUTPUT: iptables -A OUTPUT -p tcp --dport 80 -j REJECT Ahora si probamos a acceder a través del navegador a cualquier página web comprobaremos que no nos es posible. 19. Añadimos las reglas a la cadena OUTPUT: iptables -A OUTPUT -p tcp --dport 53 -j REJECT iptables -A OUTPUT -p udp --dport 53 -j REJECT A continuación, si probamos a hacer un ping a www.google.es desde la máquina centos comprobaremos que no nos resolverá: ping www.google.es 20. Modificamos la política por defecto de la cadena OUTPUT: iptables -P OUTPUT DROP Ahora si probamos a hacer un ping a la máquina ubuntu comprobaremos que no somos capaces: ping 10.0.0.72 (modifica la ip por la de tu máquina Ubuntu) Administración de sistemas de software libre. Práctica 15 13
21. Volvemos a modificar la política por defecto: iptables -P OUTPUT ACCEPT A continuación agregamos la regla especificada: iptables -I OUTPUT! -d 10.0.0.0/255.255.255.0 -j REJECT A continuación si probamos a hacerle un ping a www.google.es no obtendremos respuesta: ping www.google.es Si hacemos el ping a la máquina ubuntu no tendremos problemas: ping 10.0.0.72 (modifica la ip por la de tu máquina Ubuntu) Guardamos las reglas del firewall: 22. Eliminamos todas las reglas de la tabla OUTPUT: iptables -F OUTPUT Probamos a hacer ping a www.google.es ahora: ping www.google.es Administración de sistemas de software libre. Práctica 15 14
Mostramos las reglas del firewall con los parámetros especificados: iptables -nvl 23. Mostramos las reglas con el número de línea: iptables -nvl --line Ahora borramos la regla del LOG que ocupa la línea 20: iptables -D PERSONALIZADO 20 Administración de sistemas de software libre. Práctica 15 15
Mostramos las reglas de nuevo y comprobamos que la cadena en cuestión ya no está: iptables -nvl Guardamos las reglas del firewall: 24. Deshabilitamos el servicio iptables: /etc/init.d/iptables stop Lo dejamos deshabilitado por defecto: chkconfig iptables off Administración de sistemas de software libre. Práctica 15 16