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
![dns](https://i.imgur.com/Ep1vuVz.png)
**Tráfico HTTP**
```bash
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
![http](https://i.imgur.com/aB17haB.png)
**Tráfico HTTPS**
```bash
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
![https](https://i.imgur.com/BzyJeje.png)
**Tráfico HTTP/HTTPs**
Los dos puntos anteriores se pueden resumir en una sola regla
```bash
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**
```bash
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
![web](https://i.imgur.com/1TbKhY2.png)
## Ejercicios
### 1. Permite poder hacer conexiones ssh al exterior
Para esto uso las reglas de ssh citas anteriormente:
```bash
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
```bash
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
```
![ssh1](https://i.imgur.com/8h6tmFh.png)
![ssh2](https://i.imgur.com/xhNYful.png)
### 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
```bash
iptables -L -n -v --line-numbers
```
![iptables](https://i.imgur.com/VLs4Xd7.png)
La regla que permite el acceso está en la dirección 8; ahora creo la regla con la ip de mi máqunina:
```bash
iptables -I INPUT 8 -s 172.29.0.42 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j DROP
```
![iptables2](https://i.imgur.com/T361Yz0.png)
Ahora compruebo que no puedo acceder al servidor web desde mi máquina
![web](https://i.imgur.com/9xydTG9.png)
### 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
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: