Servidor FTP con TLS con Pure-FTP

De WikiSalud
Revisión a fecha de 10:22 10 sep 2019; Alortiz (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Contenido

Resumen

Servidor FTP con soporte TLS y autenticación contra servidor LDAP con Pure-FTP

Introducción

Un servidor FTP es una tecnología bastante vieja que ya no debería instalarse en ninguna organización; sin embargo, es posible que se halle con la necesidad de uno, así que al menos habrá que hacerlo bien.

Para empezar, usamos nuestro almacén de credenciales existentes. Así nos ahorramos el trabajo de crear nuevos usuarios y éstos siguen manteniendo una contraseña.

Nuestro FTP es básicamente un directorio que todos los usuarios comparten con todos.

Luego, TLS. Cifrar los datos que enviamos debería ser a estas alturas del siglo una prioridad en nuestra organización.

Procedimiento

Instalación

apt-get install pure-ftpd-ldap

Configuración

Es un esquema de configuración bastante curioso: Cada opción es un fichero en /etc/pure-ftpd/conf/, cuyo contenido es precisamente el valor de dicha opción.
Si necesitara estar seguro del nombre del fichero para una opción, el script /usr/sbin/pure-ftpd-wrapper contiene todos los valores que pueden configurarse

Nos aseguramos que otros métodos de autenticación estén desactivados

echo no > /etc/pure-ftpd/conf/UnixAuthentication
echo no > /etc/pure-ftpd/conf/PAMAuthentication

Al instalar el paquete pure-ftpd-ldap se activa la autenticación creando el fichero /etc/pure-ftpd/conf/LDAPConfigFile, y un enlace simbólico en /etc/pure-ftpd/auth/30ldap con el siguiente contenido:

/etc/pure-ftpd/db/ldap.conf

Que es básicamente la ubicación del fichero que configurara la autenticación LDAP. Para nuestro caso, ha quedado de la siguiente forma:

#############################################
#                                           #
# Sample Pure-FTPd LDAP configuration file. #
# See README.LDAP for explanations.         #
#                                           #
#############################################


# Optional: scheme to connect with to LDAP server. Default: ldap
# Other possible values: ldaps, ldapi, etc.
# Remember to set LDAPPort accordingly.

LDAPScheme ldap


# Optional: name of the LDAP server. Default: localhost

LDAPServer directorio.organizacion.org


# Optional: server port. Default: 389

LDAPPort   389


# Mandatory: the base DN to search accounts from. No default.

LDAPBaseDN ou=Users,dc=organizacion,dc=org


# Optional: who we should bind the server as.
# Default: binds anonymously or binds as 'ftp' user

LDAPBindDN cn=lector,dc=organizacion,dc=org


# Password if we don't bind anonymously
# This configuration file should be only readable by root

LDAPBindPW p4ssw0rd


# Optional: default UID, when there's no entry in a user object

# LDAPDefaultUID 500


# Optional: default GID, when there's no entry in a user object

# LDAPDefaultGID 100


# Filter to use to find the object that contains user info
# \L is replaced by the login the user is trying to log in as
# The default filter is (&(objectClass=posixAccount)(uid=\L))

# LDAPFilter (&(objectClass=posixAccount)(uid=\L))


# Attribute to get the home directory
# Default is homeDirectory (the standard attribute from posixAccount)

LDAPHomeDir directorio


# LDAP protocol version to use
# Version 3 (default) is mandatory with recent releases of OpenLDAP.

# LDAPVersion 3


# Optional: use TLS to connect to the LDAP server
# Note: if ldaps scheme is used, this property has no effect
# LDAPUseTLS  True


# Can be PASSWORD or BIND.
# PASSWORD retrieves objects and checks against the userPassword attribute
# BIND tries to bind

LDAPAuthMethod BIND


# Optional: default home directory if there's LDAPHomeDir entry

LDAPDefaultHomeDirectory /var/ftp

Reseñar que LDAPHomeDir señala un atributo que no existe. Como tal, obliga a lo usuarios a usar un directorio por defecto que se especfífica en LDAPDefaultHomeDirectory. De esta forma, todos los archivos se comparten por defecto con todos los usuarios y aún podemos chrootearlos en un directorio dentro del sistema. Los usuarios aun pueden usar chmod para cambiar los permisos y evitar que otros tengan acceso a sus archivos.

Creamos el directorio referenciado en la configuración anterior:

mkdir /var/ftp
chmod 777 /var/ftp/

Pues sí, que todo usuario que se conecta es capaz de escribir en la raíz del ftp.

Configuramos el esquema de permisos por defecto: 770 para ficheros y 750 para directorios

echo "007 027" > /etc/pure-ftpd/conf/Umask

Enjaulamos a todos:

echo yes > /etc/pure-ftpd/conf/ChrootEveryone

Especificamos los puertos usados para la comunicación como ftp pasivo

echo "49152 65534" > /etc/pure-ftpd/conf/PassivePortRange

En este momento, la configuración es bastante funcional

Para la tan esperada configuración de TLS, necesitamos primero conseguir los certificados. Una vez en nuestro poder, los unimos asi:

cat star_dominio_org.key star_dominio_org.crt > /etc/ssl/private/pure-ftpd.pem

Y lo activamos

echo 2 > /etc/pure-ftpd/conf/TLS

Reiniciamos el servicio para que los cambios surtan efecto:

systemctl restart pure-ftpd-ldap.service

Mejoras

Permisos en Firewall

Para un firewall basado en iptables, considere

$INL
Interfaz del lado de la LAN
$IND
Interfaz del lado de la DMZ
$S_FTP
Dirección IP del servidor FTP
-m set --match-set LAN src
IPSET no muerde y ayudar a reducir la cantidad de reglas para IPTABLES
# FTP Activo
iptables -t filter -A FWD_LOCAL -i $INL -o $IND -m set --match-set LAN src -d $S_FTP -p tcp -m multiport --dport 21 -m conntrack --ctstate NEW -j ACCEPT
iptables -t filter -A FWD_LOCAL -i $IND -o $INL -s 10.20.40.35 -m set --match-set LAN dst -p tcp -m multiport --sport 20 -m conntrack --ctstate NEW -j ACCEPT
# FTP Pasivo
iptables -t filter -A FWD_LOCAL -i $INL -o $IND -m set --match-set LAN src -d $S_FTP -p tcp -m multiport --dport 49152:65534 -m conntrack --ctstate RELATED,NEW -j ACCEPT


Fuentes

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas