sábado, 17 de julio de 2010

Ubuntu : Creando firewall personalizado con iptables...

Su configuración en si es bastante sencilla, es recomendable probar comando por comando en consola. De todas formas hay que crear un script para que se cargue con el arranque, ya que cada vez que se reinicia el sistema los cambios se pierden.

Probando comandos.

Abrir consola en Applications->accesories->terminal.
En consola todo lo que haremos será con el comando iptables, si no está instalado:
#sudo apt-get iptables
Pero hace años que se integró en los repositorios por defecto, lo mas seguro es que no haga falta.

Aceptamos conexiones entrantes activas en el momento. Es importante que el sistema esté limpio de intrusos en este momento. Hay que ser originales.
#sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


Aceptamos conexiones ssh tcp por el puerto por defecto (22). Esto nos permitirá loguearnos de forma remota, en caso de necesitarlo.
#sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT

Aceptamos conexiones tcp por el puerto 80, es decir www.
#sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Aceptamos todo el tráfico por el puerto loopbak (como un puerto espejo...) en posición primera de iptables.
recordemos que muchos programas utilizan la interfaz loopback para comunicarse con otras.

#iptables -I INPUT 1 -i lo -j ACCEPT

Bloqueamos todo el resto del tráfico.

#iptables -A INPUT -j DROP

Hasta ahora se puede trabajar con esto, para comprobar lo que se ha hecho hay que usar el siguiente comando:

root@laptop:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:www
DROP all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Puede ser necesario compartir la conexión en un futuro...

NAT/PAT

#sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

La orden anterior supone que su espacio de direcciones privadas es 192.168.0.0/16 y que el dispositivo que conecta con Internet es ppp0.
La sintaxis se descompone de la siguiente forma:
-t nat -- la regla es para ir a la tabla nat
-A POSTROUTING -- la regla es para añadir (-A) a la cadena POSTROUTING
-s 192.168.0.0/16 -- la regla se aplica al tráfico originado desde la dirección específica
-o ppp0 -- la regla se aplica al tráfico programado para ser enrutado a través del dispositivo de red especificado
-j MASQUERADE -- el tráfico que se ajuste a esta regla «saltará» («jump», -j) al destino MASQUERADE para ser manipulado como se describió anteriormente

Listado de filtros habilitados para el forwarding.

root@laptop:~# iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT
root@laptop:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:www
DROP all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 192.168.0.0/16 anywhere

Maquina ppp0 la anterior y las activas en el momento.

root@laptop:~# iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
root@laptop:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:www
DROP all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target prot opt source destination

ACCEPT all -- 192.168.0.0/16 anywhere
ACCEPT all -- anywhere 192.168.0.0/16 state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Ahora para que todo el trabajo no se pierda al reiniciar, hay que crear un script con todos los comandos aplicados hasta el momento...

En un archivo de texto en blanco, abierto con el writer de openoffice, se añaden las siguientes lineas:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -j DROP
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT
sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT

Guardar y cerrar. En consola se le aplica al archivo permiso de ejecución:
#chmod +x nombredelscript

Un apunte, para comprobar que no hay intrusos en el sistema, se puede hacer con el comando:

# chkrootkit -q

No hay comentarios: