linux - puerto - permitir ssh iptables debian
Linux Bash: Establecer reglas de iptables para permitir FTP activo y pasivo (5)
¡He encontrado un gran error en el script anterior!
Las reglas son incorrectas, debería ser así:
$IPT -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED -j ACCEPT
¡Dport y Sport cambian de lugar! Si va a un destino, si se conecta a un servidor, el puerto de origen es dinámico y está especifico para el cliente y no se conoce, ¡sin embargo, se establece una conexión!
Imho, la segunda línea es ambigua en absoluto, porque usted no sabe qué puertos usará un cliente del lado del servidor para establecer una conexión ftp. Mejor sería una regla como esta, si el tráfico saliente está bloqueado por defalut:
$IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
Pero esto solo es necesario si la regla
$IPT -P OUTPUT DROP
está en la parte superior del conjunto de reglas.
Saludos
Marcus
Tengo una PC en la que tengo instalado un servidor FTP. Quiero establecer las reglas de iptables para permitir FTP activo y pasivo. He intentado con el siguiente código que las personas informan que está funcionando, pero parece que bloquea todo el tráfico (las páginas ya no se cargan, etc.)
#!/bin/bash
IPT=/sbin/iptables
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
# Setting default filter policy
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
# Allow FTP connections @ port 21
$IPT -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
# Allow Active FTP Connections
$IPT -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
# Allow Passive FTP Connections
$IPT -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
Consulte este sitio para obtener una explicación: http://slacksite.com/other/ftp.html
Cliente FTP:
lsmod | grep ftp
modprobe nf_conntrack_ftp or modprobe ip_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
SERVIDOR FTP
lsmod | grep ftp
modprobe nf_conntrack_ftp or modprobe ip_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 --sport 1024:-m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Para alternar entre modo pasivo y activo en el lado del cliente
ftp> passive
Passive mode on.
ftp> passive
Passive mode off.
De su pregunta, supongo que tiene un host trivial con un conjunto común de aplicaciones, como el navegador web, el cliente de correo, puede ser telnet y | o ssh-client, también puede ser ftp-client, puede ser un poco de mensajería instantánea, etc. Y tener todo Estas aplicaciones funcionan. También desea permitir que un servidor FTP en este host funcione tanto en modo activo como pasivo para los clientes que se conectarán. Aquí hay 3 bloques de reglas aplicables en este caso. El bloque de reglas comunes es el conjunto minimalista de reglas aplicables para la mayoría de los hosts de los clientes. El siguiente es un bloque de reglas para ftp-client, si lo tiene en su host. Las reglas para ftp-client son ligeramente diferentes de las reglas para otros clientes: siempre hay dos conexiones para habilitar la transferencia de datos: ftp-control (puerto 21) y ftp-data (puerto 20 en modo activo o puerto aleatorio en modo pasivo). Probablemente nunca necesitará reglas de cliente para el modo Activo porque el modo Pasivo es una opción única para redes NAT.
Las reglas para el servidor FTP están en el último bloque.
Compruebe que tiene ip_conntrack_ftp (puede llamarse nf_conntrack_ftp) en el kernel:
> lsmod | grep conn
Si no tiene este módulo kernel, las reglas ''RELACIONADAS'' no funcionarán y, probablemente, la conexión de ftp-data no se iniciará, mientras que la conexión primaria de ftp-control se colgará en algún lugar después del comando ''PORT''. Todavía puede hacer cumplir la conexión de datos ftp en este caso, pero en el gasto de degradación de la seguridad proporcionada por las reglas modificadas. Los ajustes están en comentarios que preceden las reglas.
Pro
#!/bin/bash
IPT=/sbin/iptables
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
# Block of common rules #####################################################
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -p icmp -j ACCEPT
$IPT -A INPUT -p icmp -j ACCEPT
# allow DNS queries and replies
$IPT -A OUTPUT -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -p udp --sport 53 -j ACCEPT
# allow all Your possible client applications to work
$IPT -A OUTPUT -p tcp -m multiport --dports ssh,telnet,http,https,xmpp-client,aol,smtp,pop3,imap2,imap3 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp -m multiport --sports ssh,telnet,http,https,xmpp-client,aol,smtp,pop3,imap2,imap3 -m state --state RELATED,ESTABLISHED -j ACCEPT
# End of block of common rules ##############################################
# If You have ftp-client too, this block of rules
# will allow it to work with external ftp servers in both modes.
#
# First, allow ftp-control at client side:
$IPT -A OUTPUT -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
#
# Then allow ftp-data Active Mode at client side:
# Client accepts RELATED connection from server port 20
# to client port number negotiated in ftp-control connection.
# nf_conntrack_ftp is REQUIRED at client host
# to pick up this client port number from payload of ftp-control packets,
# otherwise You are forced to use ''NEW'' instead of ''RELATED''.
# And in the case of ''NEW'' You allow connection to ANY port of Your host!
$IPT -A INPUT -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
#
# Finally, allow ftp-data Passive Mode at client side:
# Client starts RELATED connection from random own high port number
# to server fixed high port number negotiated in ftp-control connection.
# nf_conntrack_ftp is REQUIRED again at client host
# to pick up this client port number from payload of ftp-control packets,
# otherwise You are forced to use ''NEW'' instead of ''RELATED'' !
-A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
#######[ Block of rules needed for Local FTP Server ]#######
# This block of rules allows clients to access Your FTP server at this host
# either in Active or Passive mode.
# You may need to enable Passive mode in FTP server config file,
# e.g. with pasv_enable=yes in /etc/vsftpd.conf if vsftpd is Your choice.
#
# Ftp-control at server side:
# (some example rules are given below just to show
# how You can selectively restrict access to Your FTP server):
$IPT -A INPUT -s 1.2.3.0/24 -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -s 5.6.7.8/32 -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
#
# Ftp-data Active Mode at server side:
# Server starts RELATED connection from server port 20
# to client port number negotiated in ftp-control connection.
# nf_conntrack_ftp is REQUIRED to pick up this client port number
# from payload of ftp-control packets,
# otherwise You are forced to use ''NEW'' instead of ''RELATED'' !
$IPT -A OUTPUT -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
#
# Ftp-data Passive Mode at server side:
# Server accepts RELATED client connection from random client high port number
# to own fixed high port number negotiated in ftp-control connection.
# nf_conntrack_ftp is REQUIRED to pick up this own fixed high port number
# from payload of ftp-control packets,
# otherwise You are forced to use ''NEW'' instead of ''RELATED''.
# And in the case of ''NEW'' You allow connection to ANY high port of Your server!
$IPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
######
Ese código SÓLO permite conexiones FTP entrantes y salientes. No permite ninguna otra entrada o salida.
$IPT -P INPUT DROP
Cae todo el tráfico entrante. Por lo tanto, si comienza con eso, querrá habilitar el tráfico en cualquier otro servicio que tenga en ejecución y que quiera permitir.
$IPT -A INPUT -p tcp --sport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 21 -m state --state ESTABLISHED -j ACCEPT
Esta regla permitiría el tráfico FTP entrante.
Una explicación de lo que es / hace esta secuencia de comandos es que elimina todas las cadenas de tablas IP existentes, luego agrega reglas para permitir todo el tráfico saliente y bloquear todo el tráfico entrante excepto FTP.
Los argumentos para las líneas ENTRADA y SALIDA deben voltearse en la sección # Permitir conexiones FTP @ puerto 21; de lo contrario, se bloquearán las conexiones FTP nuevas (activas).
# Allow FTP connections @ port 21
$IPT -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT