Autor
|
Tema: Abrir puertos FTP con iptables (Leído 5,689 veces)
|
Drakaris
Desconectado
Mensajes: 286
Todo lo que puedas imaginar, lo puedes crear.
|
Hola, estoy confgurando los puertos de mi servidor. Para ello bloqueé todos los puertos. Y abrí el puerto SSH (ssh-server) y HTTP (apache2), ya que tiene el servicio apache2 y un servidor ssh. Esta es por ahora mis reglas *filter :INPUT DROP [9048:4904870] :FORWARD DROP [0:0] :OUTPUT DROP [5753:7485333] -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --sport 22 -j ACCEPT -A INPUT -p icmp -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 21 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT -A OUTPUT -p icmp -j ACCEPT COMMIT
Los puertos 22,80 y 21 están abiertos. Según me he informado el puerto 21 es el puerto predeterminado del FTP (vsftpd) pero solamente permite la conexión al host, después esta el puerto 20 que permite la transferencia de los archivos, así que lo abro con estas reglas iptables -I INPUT -p tcp --dport 20 -j ACCEPT #le digo que en el puerto de entrada si hay un paquete con el puerto de destino 20 lo acepte iptables -I INPUT -p tcp --sport 20 -j ACCEPT #si el origen del puerto es 20 iptables -I OUTPUT -p tcp --sport 20 -j ACCEPT #si el puerto de origen es 20 iptables -I OUTPUT -p tcp --dport 20 -j ACCEPT #si el puerto de destino es 20
AL insertar estas reglas, puedo logearme al servidor pero no me carga los archivos, además cuando hago una comprobacion de puertos abiertos me dice que esta cerrado. En que estoy fallando? Atentamete Drakaris
|
|
« Última modificación: 8 Octubre 2019, 00:10 am por Drakaris »
|
En línea
|
Lo increible, no es lo que ves, sino como es
|
|
|
MinusFour
|
Pon la lista tal cual tienes ahora: sudo iptables -L
No abras los mismos puertos para origen y destino. Si tu eres el servidor filtras por destino (dport) en INPUT y por origen (sport) en OUTPUT (a menos que estés haciendo una conexión inversa).
|
|
|
En línea
|
|
|
|
engel lex
|
:INPUT DROP [9048:4904870] :FORWARD DROP [0:0] :OUTPUT DROP [5753:7485333] cuidado con reglas complicadas... el forward drop usualmente es solo necesario cuando tu servidor es un proxy o vpn, de resto no debe tener reglas de forward (y aun así a menos que sepas bien lo que haces no se recomienda mucho) el output drop tampoco es muy buena idea, eso es en caso que estés evitando que un usuario saque datos mas allá de los puertos permitidos,, pero aplica mas o menos igual que con forward... input drop sería la unica necesaria, ya que si no escucha inputs no hay outputs AL insertar estas reglas, puedo logearme al servidor pero no me carga los archivos, además cuando hago una comprobacion de puertos abiertos me dice que esta cerrado. si puedes logearte el puerto está abierto, los escaner de puertos hay que entender que hay "bajo el capó" para entender con claridad los resultados, no hay mejor prueba que la conexión te recomiendo limpiar esas configuraciones que te dije y puedes olvidarte de todas las reglas con --sport ya que no hay output drop, solo importan ahora las --dport, desploquea 20, 21 y 22 y luego prueba
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
Drakaris
Desconectado
Mensajes: 286
Todo lo que puedas imaginar, lo puedes crear.
|
:INPUT DROP [9048:4904870] :FORWARD DROP [0:0] :OUTPUT DROP [5753:7485333] cuidado con reglas complicadas... el forward drop usualmente es solo necesario cuando tu servidor es un proxy o vpn, de resto no debe tener reglas de forward (y aun así a menos que sepas bien lo que haces no se recomienda mucho) el output drop tampoco es muy buena idea, eso es en caso que estés evitando que un usuario saque datos mas allá de los puertos permitidos,, pero aplica mas o menos igual que con forward... input drop sería la unica necesaria, ya que si no escucha inputs no hay outputs si puedes logearte el puerto está abierto, los escaner de puertos hay que entender que hay "bajo el capó" para entender con claridad los resultados, no hay mejor prueba que la conexión te recomiendo limpiar esas configuraciones que te dije y puedes olvidarte de todas las reglas con --sport ya que no hay output drop, solo importan ahora las --dport, desploquea 20, 21 y 22 y luego prueba Hola, he puesto la politica de INPUT en DROP y las demás en ACCEPT, y después inserté las reglas correspondiente. Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:http ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:ftp ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data
Chain FORWARD (policy ACCEPT) target prot opt source destination
Chain OUTPUT (policy ACCEPT) target prot opt source destination
El servidor web responde, y el ssh también. El problema es que en el servidor FTP abro el puerto 21 que es de conexion y también el puerto 20, y no me funciona. Pero pasa algo currioso ya que si accedo desde el navegador o desde nautilus no puedo acceder a los archivos pero en el caso del navegador se intenta conectar y en nautilus se conecta pero no muestra los archivos se queda cargando. Pero si lo ejecuto desde la terminal y pongo las credenciales si puedo acceder y editar los archivos. Por que ocurre esto? Además he mirado mis puertos abierto con netstat -p tcp -n | grep ftp y sale esto: tcp6 0 0 192.168.0.2:21 192.168.0.3:49670 ESTABLISHED Parece que el protocolo es tcp6 que en el caso de iptables no se como abrir este tipo de protocolo. y la dport es un puerto mayor a 1024 por la cual tambien probé esta regla iptables -I INPUT -p tcp --sport 20 -j ACCEPT y no funciona ni tampoco con -6 Que puede pasar?
|
|
|
En línea
|
Lo increible, no es lo que ves, sino como es
|
|
|
MinusFour
|
Si te funciona el cliente FTP no es problema del servidor, es problema de nautilus o desde el equipo que estás intentando conectarte con Nautilus.
|
|
|
En línea
|
|
|
|
Drakaris
Desconectado
Mensajes: 286
Todo lo que puedas imaginar, lo puedes crear.
|
Si te funciona el cliente FTP no es problema del servidor, es problema de nautilus o desde el equipo que estás intentando conectarte con Nautilus.
Si. El servidor cuando hace una conexion FTP lo hace por el puerto 21, pero cuando debe de hacer transferencia de datos,teóricamente tendría que entrar/salir por el puerto 20, pero snifeé la red y no ocurre esto, lo que hace es que los sport y dport son puertos aleatorios mayor que 1024, (no siempre). img: https://drive.google.com/file/d/1rfUIrP5mi1IVQa_6NKPSrD1xVCkzAYiD/view?usp=sharingHaciendo así que se conecta pero no se muestra los archivos. La pregunta es..¿como le digo a vsftpd que el puerto de transferencia de datos es el 20? Para ello estan estas configuraciones del vsftpd.conf pasv_enable pasv_max_port pasv_min_port ftp_data_port
pero probé con todas aquellas y no me funciona. ¿Como puedo decirle que el puerto de data sea el que yo quiera? o sino ¿como puedo hacer una regla qcon iptables que cuando detecte un paquete con el protocolo ftp-data me lo habilite, sin importar que puerto sea el de entrada o salida?
|
|
|
En línea
|
Lo increible, no es lo que ves, sino como es
|
|
|
MinusFour
|
Si, lo que pasa ahí es que estás usando el modo pasivo de FTP. Necesitas establecer un rango de puertos: Por ejemplo: 49000-50000 (49000 es min_port y 50000 es max_port). Los puertos son puertos destinos en la cadena de INPUT: sudo iptables -A INPUT -p tcp --dport 49000:50000
La regla del puerto 20 también debería estar en OUTPUT como puerto de origen (si tienes una política de DROP, sino no tiene caso). Edit: Por cierto, si utilizas SSH bien puedes utilizar sftp en lugar ftp. No hay modo pasivo ahí, todo va por un solo puerto (22) y encima la información va cifrada.
|
|
« Última modificación: 7 Octubre 2019, 00:48 am por MinusFour »
|
En línea
|
|
|
|
Drakaris
Desconectado
Mensajes: 286
Todo lo que puedas imaginar, lo puedes crear.
|
Hola.Ya pude solucionar el problema. Como previamente había dicho MinusFour, es que los puertos de los clientes a la conexion al servidor son aleatorios mayor que 1024, por la cual como lo estaba bloqueando todos pues no se hacía la transferencia. Como comentó él, seleccioné un rango para que escoja un puerto aleatorio a ese rango y yo lo permitiera en iptables. pasv_min_port=1025 pasv_max_port=1035 pasv_enable=YES
y después iptables -I INPUT -p tcp --dport 1025:1035 -j ACCEPT Por manías mias seleccione el puerto mínimo 1025 y el máximo 1025, por la cual solo le dejo un puerto para la transferencia de archivos. El resultado sería este: Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:1025:1035 ACCEPT tcp -- anywhere anywhere tcp dpt:ftp ACCEPT tcp -- anywhere anywhere tcp spt:http ACCEPT tcp -- anywhere anywhere tcp dpt:http ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp spt:ssh ACCEPT icmp -- anywhere anywhere
Chain FORWARD (policy ACCEPT) target prot opt source destination
Chain OUTPUT (policy ACCEPT) target prot opt source destination
Gracias por vuesto tiempo.
|
|
« Última modificación: 15 Noviembre 2019, 16:29 pm por Drakaris »
|
En línea
|
Lo increible, no es lo que ves, sino como es
|
|
|
MinusFour
|
Honestamente, no conozco lo suficiente del protocolo FTP para decir que un solo puerto puede manejar multiples conexiones al mismo tiempo. Si lo normal es especificar un rango de puertos yo creo que no. Como yo tengo entendido, cuando se hace la transferencia de un archivo en el modo pasivo, el servidor empieza a escuchar en un determinado puerto y le notifica al usuario el puerto en el que está escuchando. Quizás sea posible compartir la conexión pero me imagino que sería algo complicado.
|
|
|
En línea
|
|
|
|
Drakaris
Desconectado
Mensajes: 286
Todo lo que puedas imaginar, lo puedes crear.
|
Honestamente, no conozco lo suficiente del protocolo FTP para decir que un solo puerto puede manejar multiples conexiones al mismo tiempo. Si lo normal es especificar un rango de puertos yo creo que no. Como yo tengo entendido, cuando se hace la transferencia de un archivo en el modo pasivo, el servidor empieza a escuchar en un determinado puerto y le notifica al usuario el puerto en el que está escuchando. Quizás sea posible compartir la conexión pero me imagino que sería algo complicado.
Perdón, es verdad, con un puerto unicamente no puedes teenr multiples sesiones
|
|
|
En línea
|
Lo increible, no es lo que ves, sino como es
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Solucionado] Abrir puerto en firewall con iptables
Redes
|
Riudo
|
6
|
8,160
|
30 Septiembre 2010, 10:58 am
por madpitbull_99
|
|
|
duda bloquear puertos con con squid e iptables
Redes
|
danielo-
|
2
|
9,028
|
14 Mayo 2011, 17:28 pm
por danielo-
|
|
|
Permitir solo algunos puertos con iptables
Seguridad
|
matiasramos
|
0
|
2,439
|
28 Junio 2013, 22:25 pm
por matiasramos
|
|
|
Denegar acceso a todos los puertos menos uno en iptables
« 1 2 »
GNU/Linux
|
WHK
|
12
|
8,516
|
10 Mayo 2015, 04:22 am
por WHK
|
|
|
iptables puertos redireccionado lan
GNU/Linux
|
fabiancorreo
|
1
|
2,557
|
1 Junio 2015, 19:49 pm
por xv0
|
|