vsftpd: múltiples IPs en listen_address

vsftpd (very secure FTP daemon) tiene la peculiaridad de que no permite establecer varias IPs en escucha (listen_address) dentro de una misma instancia/demonio. Con una única instancia, tenemos la posibilidad de:

  • Escuchar en todas las IPs del sistema (por defecto).
  • Escuchar en una única IP especificada en listen_address.

Pero lo que no podemos hacer es especificar varias IPs (pero no todas) en el fichero de configuración con la directiva listen_address:

listen_address=10.0.0.100,10.0.3.100

La forma de establecer que vsftp escuche por varias IPs es configurando un demonio independiente por cada IP. Cada demonio estará configurado con un archivo de configuración independiente (/etc/vsftpd*.conf) y en ese archivo se especificará la IP por la que va a escuchar.

Para el caso anterior, podríamos crear:

/etc/vsftpd/vsftpd.conf

listen_address=10.0.0.100

/etc/vsftpd/vsftpd-2.conf

listen_address=10.0.3.100

Una vez creados los dos ficheros de configuración, basta con arrancar el servicio con el script de arranque. Aseguraos de que el script de arranque está preparado para arrancar múltiples instancias. Lo veréis en el código de la función de arranque:

        if [ -d /etc/vsftpd ] ; then
                CONFS=`ls /etc/vsftpd/*.conf 2>/dev/null`
                [ -z "$CONFS" ] && exit 6
                PROC_FAILED=0
                for i in $CONFS; do
                        site=`basename $i .conf`
                        echo -n $"Starting $prog for $site: "
                        daemon /usr/sbin/vsftpd $i

Si os fijáis, arranca un demonio por cada archivo de configuración en «/etc/vsftpd/*.conf». Una vez levantado verificamos que cada demonio escucha por una IP:

# netstat -natp | grep ftp
tcp   0      0 10.0.0.100:21     0.0.0.0:*     LISTEN      6468/vsftpd
tcp   0      0 10.0.3.100:21     0.0.0.0:*     LISTEN      6463/vsftpd