La plataforma es CentOS 6.2
Datos:
IP del FTP : 172.16.0.84
El proceso sera sencillo, comenzamos instalando el programa
# yum install vsftpd -y
Editamos el archivo /etc/vsftpd/vsftpd.conf
# vi /etc/vsftpd/vsftpd.conf
background=YES
anonymous_enable=NO
local_enable=YES
guest_enable=YES
virtual_use_local_privs=YES
write_enable=YES
pam_service_name=vsftpd-virtual
xferlog_file=/var/log/vsftpd.log
user_sub_token=$USER
local_root=/var/www/html/$USER
anon_root=/var/www/ftp
chroot_local_user=YES
hide_ids=YES
listen=YES
listen_port=21
ftp_data_port=20
pasv_min_port=65500
pasv_max_port=65535
connect_from_port_20=YES
local_umask=022
max_clients=20
max_per_ip=10
secure_chroot_dir=/usr/share/empty
Guardamos los cambios y listo ahora falta la creación de usuarios ....
Elabore un pequeño script para la creación de los usuarios ... lo llamaremos ftpadduser
# vi /usr/local/sbin/ftpadduser
#!/bin/bash
if [ -z "$1" ]; then
echo "Ingrese el usuario ..."
exit 1
fi
if [ -z "$2" ]; then
echo "Ingrese la clave ..."
exit 1
fi
echo "$1" >> /opt/virtual-users.txt
echo "$2" >> /opt/virtual-users.txt
db_load -T -t hash -f /opt/virtual-users.txt /etc/vsftpd/virtual-users.db
mkdir /var/www/html/$1
chown -R ftp:ftp /var/www/html/$1
Listo ejecutando ese script se podra crear las cuentas FTP
Ahora debemos ver el selinux, podriamos deshabilitarlo pero por temas de seguridad lo conservamos(Enforcing) y ejecutamos lo siguiente
setsebool allow_ftpd_full_access on
setsebool ftp_home_dir on
Ahora el servidor FTP ya esta operativo ... En nuestro Firewall(iptables) haremos el respectivo NAT
Dentro de nuestro script de iptables, cargaremos algunos módulos
#Definiendo variables
IPT="/sbin/iptables"
EXT_IP="IP Externa"
FTP="172.16.0.84"
# Cargando módulos
...
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
...
#Realizando el NAT
$IPT -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 20:21 -m state --state NEW,ESTABLISHED,RELATED -j DNAT --to-destination $FTP
$IPT -A FORWARD -d $FTP -p tcp --dport 20:21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -s $FTP -p tcp --sport 20:21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Listo ... con esto ya debería estar operativo al 100% ... se entiende que falta el enmascaramiento en el script del firewall ...