Mediante el siguiente 'como' se pretende dejar SOLO abiertos los puertos 80 (web), 21 (ftp) y 22 (ssh).
# iptables -A INPUT -p tcp -m multiport --dports 21,22,80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
La explicación vendría siendo esta:
-A INPUT, añade una regla que afecta al trafico entrante. Podria ser -A OUTPUT, y afectaria al saliente, pero nos centramos en el entrante.
Luego hay 2 maneras de establecer las reglas a los puertos: puerto a puerto, o en grupos.
Puerto a puerto seria: --dport 21 -o --dport 80 -o tambien --dport 21:80 (del 21 al 80, osea, consecutivos)
Por el contrario si deseamos puertos salteados, usaremos -m multiport --dports 21,22,80
-m state --state NEW...
NEW son conexiones nuevas, established son las ya establecidas.
RELATED lo que hace es guardar en una tabla el paquete que ha dejado pasar y si vuelve, te lo deja pasar, si no: no
puedes definir interfaces de red:
-i eth0 --> interface de entrada
-o eth0 --> interface de salida
-s ip/host/dominio --> fuente d ela conexion, desde donde se establece.
Con esto podriamos hacer, por ejemplo, permitir conectar al puerto 22 solo a la ip 85.251.98.36 y a las demas denegarlas Luego establecería mos las políticas por defecto para que no pasara nada de lo que no hemos definido:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
El script que acontinuación detallo es para aplicar las reglas que queramos y establezca las políticas por defecto. También nos permite iniciar/parar/reiniciar eiptables como si fuera un servicio más.Este script deberemos ponerlo en /etc/init.d/ para que se ejecute nada más iniciar el sistema.
### BEGIN INIT INFO
# Provides: cortafuegos iptables
# X-UnitedLinux-Should-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Cortafuegos basado en iptables
# Description: Arranca un cortafuegos basado en iptables
### END INIT INFOcase "$1" in
start)
echo "Arrancando iptables..."
echo "Generando reglas..."
echo "Reglas generadas con exito y listo para funcionar."
iptables -F
iptables -X
iptables -Z
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 21,22,80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
;;
stop)
echo "Parando iptables..."
echo "Borrando reglas de iptables..."
echo "Las reglas se han eliminado satisfactoriamente."
echo "Su red actualmente esta expuesta a internet sin protección."
# Borramos las reglas de las cadenas y los contadores
iptables -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
;;
restart)
$0 stop
$0 start
;;
status)
iptables -nL
;;
*)
echo "Uso: $0 {start|stop|restart|status}"
;;
esac
exit 02543
Últimos comentarios