7.5 KiB
title | date | draft | image | categories | tags | ||||
---|---|---|---|---|---|---|---|---|---|
Cortafuegos I: De nodo con iptables | 2023-02-15T23:46:36+01:00 | false | featured.png |
|
|
Enunciado: https://fp.josedomingo.org/seguridadgs/u03/ejercicio1.html
Preparación
Limpiamos las reglas previas
iptables -F
iptables -t nat -F
iptables -Z
iptables -t nat -Z
Acceso por SSH
Antes de añadir la política por defecto voy a añadir reglas para permitir el acceso por ssh
iptables -A INPUT -s 172.22.0.0/16 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 172.22.0.0/16 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Estas reglas sirve para acceder desde la misma red, además añado las siguientes para acceder a través de la VPN
iptables -A INPUT -s 172.29.0.0/16 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 172.29.0.0/16 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Ahora añado las políticas por defecto
iptables -P INPUT DROP
iptables -P OUTPUT DROP
Ahora pruebo que se han aplicado, por ejemplo, haciendo un ping:
Permitimos tráfico por la interfaz de loopback
iptables -A INPUT -i lo -p icmp -j ACCEPT
iptables -A OUTPUT -o lo -p icmp -j ACCEPT
Peticiones y respuestas del protocolo ICMP
iptables -A INPUT -i ens3 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -o ens3 -p icmp --icmp-type echo-request -j ACCEPT
Pruebo que funciona haciendo un ping
Consultas y respuestas DNS
iptables -A OUTPUT -o ens3 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens3 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
Pruebo que funciona haciendo una consulta DNS
Tráfico HTTP
iptables -A OUTPUT -o ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Pruebo que funciona haciendo una consulta HTTP
Tráfico HTTPS
iptables -A OUTPUT -o ens3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Pruebo que funciona haciendo una consulta HTTPS
Tráfico HTTP/HTTPs
Los dos puntos anteriores se pueden resumir en una sola regla
iptables -A OUTPUT -o ens3 -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens3 -p tcp -m multiport --sports 80,443 -m state --state ESTABLISHED -j ACCEPT
Acceso al servidor web
iptables -A INPUT -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Pruebo que funciona haciendo una consulta HTTP desde el exterior
Ejercicios
1. Permite poder hacer conexiones ssh al exterior
Para esto uso las reglas de ssh citas anteriormente:
iptables -A INPUT -s 172.22.0.0/16 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 172.22.0.0/16 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Estas reglas sirve para acceder desde la misma red, además añado las siguientes para acceder a través de la VPN
iptables -A INPUT -s 172.29.0.0/16 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 172.29.0.0/16 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
2. Deniega el acceso a tu servidor web desde una ip concreta
Como ya he creado en la preparación una regla que permite el acceso al servidor web, para que el bloque funcione tengo que añadir la regla antes, ya que el orden es importante en iptables. Para ello, primero miro la posición de la regla que permite el acceso al servidor web
iptables -L -n -v --line-numbers
La regla que permite el acceso está en la dirección 8; ahora creo la regla con la ip de mi máqunina:
iptables -I INPUT 8 -s 172.29.0.42 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j DROP
Ahora compruebo que no puedo acceder al servidor web desde mi máquina
3. Permite hacer consultas DNS sólo al servidor 192.168.202.2. Comprueba que no puedes hacer un dig @1.1.1.1
Primero borro las reglas de DNS que he creado anteriormente
iptables -D OUTPUT -o ens3 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -D INPUT -i ens3 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
Y ahora añado las reglas nuevas, permitiendo solo el servidor 192.168.202.2:
iptables -A OUTPUT -d 192.168.202.2 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.202.2 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
Ahora compruebo que no puedo hacer un dig@1.1.1.1 www.josedomingo.org
:
Y si que puedo usando el dns, dig@192.168.202.2 www.josedomingo.org
:
4. No permitir el acceso al servidor web de www.josedomingo.org, Tienes que utilizar la ip. ¿Puedes acceder a fp.josedomingo.org?
Al igual que en el ejercicio 2, primero miro la posición de la regla que permite el acceso al servidor web
Está en el lugar 5. Ahora creo la regla con la ip de josedomingo.org:
iptables -I OUTPUT 5 -d 37.187.119.60 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j DROP
Compruebo que se ha creado correctamente:
Ahora compruebo que no puedo acceder al servidor web de josedomingo.org
y si que puedo acceder a portquiz.net:
5. Permite mandar un correo usando nuestro servidor de correo: babuino-smtp. Para probarlo ejecuta un telnet babuino-smtp.gonzalonazareno.org 25
Para hacerlo utilizo la ip de babuino:
iptables -A OUTPUT -d 192.168.203.3 -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -s 192.168.203.3 -p tcp --sport 25 -j ACCEPT
6. Instala un servidor mariadb, y permite los accesos desde la ip de tu cliente. Comprueba que desde otro cliente no se puede acceder
Instalo MariaDB:
apt install mariadb-server
Configuro el acceso remoto, editando el fichero /etc/mysql/mariadb.conf.d/50-server.cnf
:
bind-address = 0.0.0.0
Tras eso, reinicio el servicio y añado la regla para permitir el acceso desde mi cliente:
sudo iptables -A INPUT -s 172.29.0.42 -p tcp --dport 3306 -j ACCEPT
sudo iptables -A OUTPUT -d 172.29.0.42 -p tcp --sport 3306 -j ACCEPT
Ahora, en la siguiente captura, realizo una conexión con la base de datos desde el cliente, tras eso, desconecto la VPN para dejar de tener la IP que está autorizada, y vuelvo a intentar acceder, pero no puedo: