Instalación de Pure-FTP sobre TLS con antivirus ClamAV

Pure-FTP configurado el transporte con TLS y un servicio de Antivirus opensource conocido el ClamAV

Repositorios

Instalación de repositorio RPM Fusión (En caso de no tenerlo instalado)

Arquitecturas:

En este ejemplo de instalación usamos el repositorio de x86_64

$ wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
$ rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
$ rpm -K rpmforge-release-0.5.2-2.el6.rf.*.rpm
rpmforge-release-0.5.2-2.el6.rf.i686.rpm: (sha1) dsa sha1 md5 gpg BIEN

Instalacion

Instalamos pure-ftp desde el repositorio RPM Forge.

$ yum install pure-ftpd -y --enablerepo rpmforge

Configuración

Siga la siguiente configuración.

$ vim /etc/pure-ftpd/pure-ftpd.conf
# Don't allow authenticated users - have a public anonymous FTP only.
AnonymousOnly               no

# Disallow anonymous connections. Only allow authenticated users.
NoAnonymous                 yes

# If you want simple Unix (/etc/passwd) authentication, uncomment this
UnixAuthentication            yes

# Port range for passive connections replies. - for firewalling.
PassivePortRange            30000 35000

# So 1000:10 limits every user to 1000 files and 10 Mb.
Quota                       1000:10

# When the partition is more that X percent full, new uploads are disallowed.
MaxDiskUsage               90

# Users can't delete/write files beginning with a dot ('.')
ProhibitDotFilesWrite       yes

# Prohibit *reading* of files beginning with a dot (.history, .ssh...)
ProhibitDotFilesRead        yes

# Create an additional log file with transfers logged in the standard W3C
# format (compatible with most commercial log analyzers)
AltLog                     w3c:/var/log/pureftpd.log

# Listen only to IPv4 addresses in standalone mode (ie. disable IPv6)
# By default, both IPv4 and IPv6 are enabled.
IPV4Only                 yes

Reiniciamos el servicio.

$ service pure-ftpd start
Iniciando pure-ftpd:                                       [  OK  ]

Agregamos que el servicio inicie con el sistema.

$ chkconfig pure-ftpd on

Configuración de mensaje de bienvenida (opcional)

Creamos un archivo con el mensaje.

$ touch /etc/pure-ftpd/welcome.msg
$ vim /etc/pure-ftpd/welcome.msg
!ACCESO RESTRINGIDO! !RESTRICTED ACCESS!
* Nos reservamos el derecho de guardar su IP
* We reserve the right to store your IP address

Editamos el script de inicio del servicio y agregamos la opción -F junto con el path del mensaje que editamos. Busque la linea y edite como se muestra a continuación

$ vim /etc/init.d/pure-ftpd
.
.
daemon "$pure_launch_script $pure_config --daemonize > /dev/null -F /etc/pure-ftpd/welcome.msg"
.
.

Configuración de Firewall

Abrimos los puertos en el firewall del sistema que va requerir el servicio.

$ vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20:21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 30000:40000 -j ACCEPT

Reiniciamos el servicio para aplicar cambios.

$ service iptables restart

Configuracion de Soporte SSL (ftps)

Instamos openssl, requerido para manejar el soporte SSL.

$ yum install openssl -y

Abrimos el archivo de configuración del servicio y editamos de acuerdo a los siguiente.

$ vi /etc/pure-ftpd/pure-ftpd.conf
# This option can accept three values :
# 0 : disable SSL/TLS encryption layer (default).
# 1 : accept both traditional and encrypted sessions.
# 2 : refuse connections that don't use SSL/TLS security mechanisms,
#     including anonymous sessions.

TLS                      2

# List of ciphers that will be accepted for SSL/TLS connections

TLSCipherSuite           HIGH:!MEDIUM:!LOW:+TLSv1:!SSLv2:+SSLv3@STRENGTH

Generemos los certificados que usara el servicio con openssl. Fíjese en la opción -days y ajuste según su criterio.

$ openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/pki/pure-ftpd/pure-ftpd.pem -out /etc/pki/pure-ftpd/pure-ftpd.pem -days 3650

Ajustamos los permisos del archivo a solo lectura por el usuario.

$ chmod 400 /etc/pki/pure-ftpd/pure-ftpd.pem

Reiniciamos el servicio para aplicar los cambios.

$ service pure-ftpd restart

Integración de ClamAV (Antivirus)

En Pure-FTP es posible integrar un escaneo de los archivos que se suben por medio de FTP con ClamAV.

Instalamos el servicio ClamAV desde RPM Forge.

$ yum install clamav clamd -y --enablerepo rpmforge

Damos de alta el servicio para el inicio con el sistema.

$ chkconfig clamd on

Iniciamos el servicio.

$ service clamd start

Actualizamos la base de datos de virus.

$ freshclam

Abrimos el archivo de configuración del servicio y lo habilitamos poniendo el valor yes en CallUploadScript

$ vi /etc/pure-ftpd/pure-ftpd.conf
# If your pure-ftpd has been compiled with pure-uploadscript support,
# this will make pure-ftpd write info about new uploads to
# /var/run/pure-ftpd.upload.pipe so pure-uploadscript can read it and
# spawn a script to handle the upload.

CallUploadScript yes

Creamos el siguiente script que nos permitirá ejecutar el ClamAV y escanear el archivo.

$ vi /etc/pure-ftpd/clamav_check.sh
#!/bin/bash
/usr/bin/clamscan --remove --quiet --no-summary "$1"

Ajustamos los permisos del script.

$ chmod 555 /etc/pure-ftpd/clamav_check.sh

Probamos que nuestro script funcione con pure-uploadscript, que es el encargado de ejecutar nuestro script y tenga la integración con ClamAV el servicio pure-ftp.

$ pure-uploadscript -B -r /etc/pure-ftpd/clamav_check.sh

Agregamos que se ejecute pure-uploadscript cada inicio de sistema.

$ vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
/usr/sbin/pure-uploadscript -B -r /etc/pure-ftpd/clamav_check.sh

touch /var/lock/subsys/local

Reiniciamos el servicio para aplicar los cambios.

$ service pure-ftpd restart

Armando Uch

An Accidental Engineer
• Lazy #Programmer • #TacOps 🌮 • #BOFH
🎸⚾️🍺☕️


2014-04-28