Permitir puerto específico a través de iptables

Permitir puerto específico a través de iptables

Soy nuevo con iptables. Creé un script que restablece (reset.sh) iptables y otro script (ip-chains.sh) crea cadenas como cadenas de entrada y salida. En el mismo scipr (ip-chains.sh) en la parte inferior, creé una regla solo para probar y permitir el puerto 2121 entrante y saliente que estoy usando para FTP.

El problema es que cuando ejecuto el script de reinicio puedo acceder al servidor FTP, pero cuando ejecuto el script ip-chains.sh no puedo. Estoy confundido porque tengo la regla en el mismo archivo de script para permitir el tráfico en el puerto 2121.

Estoy usando eth1 para conectarme al servidor FTP 192.168.1.0 y eth2 para conectarme a la máquina cliente. Aquí está mi script de ip-chains.sh:

    #!/bin/bash

#Flush tables and set policies to drop

iptables -F

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#Create Logging Chain for accepted packets on INPUT CHAIN

iptables -N accept-input

#Rules for  accept-input chain

iptables -A accept-input -j LOG --log-prefix "INPUT-ACCEPTED "
iptables -A accept-input -j ACCEPT

#Create Logging Chain for dropped packets on INPUT CHAIN

iptables -N drop-input

#Rules for  drop-input chain

iptables -A drop-input -j LOG --log-prefix "INPUT-DROPPED "
iptables -A drop-input -j DROP

#Create Logging Chain for accepted packets on OUTPUT CHAIN

iptables -N accept-output

#Rules for  accept-output chain

iptables -A accept-output -j LOG --log-prefix "OUTPUT-ACCEPTED "
iptables -A accept-output -j ACCEPT

#Create Logging Chain for dropped packets on OUTPUT CHAIN

iptables -N drop-output

#Rules for  drop-output chain

iptables -A drop-output -j LOG --log-prefix "OUTPUT-DROPPED "
iptables -A drop-output -j ACCEPT


#Allow port 2121

iptables -A INPUT -i eth1 -p tcp -s 0/0 --dport 2121 -m state --state NEW,ESTABLISHED,RELATED -j accept-input
iptables -A OUTPUT -o eth1 -p tcp -d 0/0 --sport 2121 -m state --state ESTABLISHED,RELATED -j accept-input

iptables -A INPUT -i eth2 -p tcp -s 0/0 --dport 2121 -m state --state NEW,ESTABLISHED,RELATED -j accept-input
iptables -A OUTPUT -o eth2 -p tcp -d 0/0 --sport 2121 -m state --state ESTABLISHED,RELATED -j accept-input

#Log all DROPPED traffic

iptables -A INPUT -j drop-input
iptables -A OUTPUT -j drop-output

iptables -L -n

Respuesta1

Tenga cuidado, cuando elimina sus reglas, iptables -Felimina todas sus reglas, ¡pero no su póliza! Entonces, si es así, policy DROP¡puedes quedar fácilmente bloqueado de tu sistema!

Generalmente es más seguro colocarlo policy ACCEPTcon una DROPúltima regla de la cadena. O mientras estás trabajando de forma remota, configura un crontrabajo en tu firewall policy ACCEPTy iptables -Fcada cinco o diez minutos; de esta manera estarás seguro de tener acceso a tu sistema en cualquier caso.

En tu script tienes iptables -p FORWARD DROPy no hay reglas de eth1hasta eth2y viceversa. Debe establecer iptables -p FORWARD ACCEPTo agregar algunas reglas a la cadena de avance para resolver su problema, por ejemplo:

iptables -A FORWARD -p tcp -i eth1 -o eth2 -s 2121 -d 2121 -j ACCEPT;
iptables -A FORWARD -p tcp -i eth2 -o eth1 -s 2121 -d 2121 -j ACCEPT;

Respuesta2

use -v para ver dónde han aterrizado los paquetes...

iptables --list -n -v

información relacionada