Páginas

jueves, 10 de abril de 2014

PF FreeBSD cortafuegos


Entendiendo PF el cortafuegos de OpenBSD Project, también portado a FreeBSD.


Pfsense utiliza PF y routers basados ​​en Linux utiliza Netfilter e iptables. iptables es más rápido, pero no es tan seguro - no realiza verdadera inspección de estado y ha tenido un considerable número de errores.

La ventaja principal que tiene PF sobre iptables es la separación del mecanismo de la política. iptables requiere que introduzca normas con argumentos variables y complicados que requieren módulos del kernel adicionales. PF es un formato de texto con un mejor programa de análisis - muy potente con un bajo costo operativo


La autoría de esta artículo pertenece a Andrew Lockhard, Analista Superior de Seguridad, Auditor de Código Ensamblador de Programas y dedica su tiempo libre a Snort-Wireless (proyecto dedicado a añadir capacidades inalámbricas a Snort popular IDS de código abierto). Espero que os sirva, como en mi caso, para entender el funcionamiento de PF.


PakcetFilter más conocido como PF supera a IPFilter, su antecesor, tanto en características como en versatilidad y es parte de FreeBSD a partir de la versión 5.3-RELEASE.

En FreeBSD tendrá que activar como mínimo las siguientes opciones de configuración del núcleo:

device pf
device pflog

Si no están presente las opciones anteriores, agréguelas recompile y reinstale el núcleo. El programa pfctl sirve para comunicarse con la parte del núcleo dedicada a PF. pfctl no se utiliza para crear reglas individuales sino que dispone de su propio lenguaje de configuración y creación de reglas.

La configuración de PF pasa por editar el archivo /etc/pf.conf

El lenguaje de creación de reglas de PF es potente y fácil de utilizar. El archivo pf.conf está dividido en siete apartados, cada uno con reglas de un tipo determinado.

En el primer apartado se declaran las variables, ya sean variables individuales como listas de valores que podrán utilizarse en el resto de apartados del archivo de configuración.

IF_EXT="em1" (internet)
IF_INT="em0" (lan)
RFC1918="{ 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }"

En el segundo apartado puede definir tablas de direcciones IP para utilizarlas posteriormente en las reglas. Utilizar estas tablas para crear listas de direcciones IP es mucho más rápido que usar las variables del primer apartado porque cuando estas se utilizan en una regla, se crean tantas reglas como valores haya definidos en dicha variable. Si utiliza tablas solo habrá una regla.

Entonces, podría crear una tabla que albergase las direcciones IP que no admiten enrutamiento según RFC 1918:

table const { 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8  }

La plabra clave const le sirve para asegurarse de que el contenido de la tabla no se modifique una vez creada. Utilice estas tablas de la misma forma que utilizaría variables:

block drop quick on $IF_EXT from any to

También podría obtener una lista de direcciones de un archivo y guardarla en una tabla utilizando la palabra clave file:

table file "/etc/origen_correo_basura.tabla"

Si decide no utilizar la palabra cable const podrá añadir más direcciones a la tabla:

pfctl -t origen_correo_basura -T add 10.1.1.1

Además, puede eliminar direcciones de la tabla con la siguiente orden:

pfctl -t origen_correo_basura -T delete 10.1.1.1

Utilice la siguiente orden para ver el contenido de la tabla:

pfctl -t origen_correo_basura -T show

Además de direcciones IP, también podría guardar nombres en la tabla. En este caso, se insertarían en la tabla las direcciones válidas que se obtengan tras la resolución.

Opciones globales

En el siguiente apartado del archivo de configuración están las opciones de configuración que modifican el comportamiento de PF. Modifíquelas para controlar tiempos de expiración de sesiones o de desfragmentación, transiciones de la tabla de estados, recopilación de datos estadísticos y otras opciones. Utilice la palabra clave set para activarlas. Existen demasiadas opciones como para poder hablar aquí sobre todas ellas con un mínimo nivel de detalle, sin embargo, veremos las más importantes y útiles.

Una de ellas es block-policy. Utilícela para determinar el comportamiento predeterminado de la palabra clave block. Su valor debe ser drop si desea que los paquetes se descarten sin ningún mensaje.

Otra alternativa es asignar el valor return, con lo que la conexión a la que pertenece el paquete y a la que se aplica la regla se reiniciará o se enviará un paquete ICMP de destino inaccesible, dependiendo si el paquete que desencadenó la regla es del tipo TCP o UDP.

Si quiere que los paquetes se descarten sin ningún mensaje de manera predeterminada, añada la siguiente línea a /etc/pf.conf:

set blcok-policy drop

Para activar el registro del número de paquetes o de bytes que atraviesan una determinada interfaz añada una línea como la siguiente:

set loginterface em0

Si no quiere guardar registro alguno:

set loginterface none


Reglas para regularizar el tráfico

El siguiente apartado contiene las reglas de regularización del tráfico. Estas reglas, se aseguran de que el tráfico que atraviese el cortafuegos cumpla ciertas reglas relacionadas con la fragmentación, el identificador IP, TTL mínimo y otros atributos del datagrama TCP. todas las reglas de esta apartado incluyen el prefijo scrub. Por lo general, scrub all será todo lo que necesite escribir. Sin embargo, si lo necesita, puede entrar en detalles indicando qué quiere regular y como quiere hacerlo. Gracias a la sintaxis de PF para la creación de reglas de filtrado puede indicar a qué tipos de paquetes se aplicarán este tipo de reglas y regularizar el tráfico con gran precisión.

Puede utilizar la instrucción scrub para que los paquetes fragmentados se reensamblen antes de ser enviados a su destinatario.
Sòlo tiene que incluir la siguiente línea en el archivo de configuració para activa el reensamblado de paquetes fragmentados en todas las interfaces:

scrub fragment reassemble

Si sólo quiere activarlo en una determinada interfaz:

scrub in on em0 all fragment reassemble

Reglas de filtrado

Los dos apartados siguientes del archivo pf.conf están relacionados con las colas de paquetes y la traducción de direcciones, pero, ya que este truco se centra en el filtrado de paquetes, nos los vamos a saltar. Lo que nos lleva al último apartado, en el que se encuentran las reglas de filtrado en sí mismas. Por lo general, la sintaxis de estas es la siguiente:

acción dirección [log] [quick] on int [interfaz] [proto protocolo] \
from dirección_origen [port puerto_origen] to dirección_destino
[port puerto_destino] \ [opciones tcp] [estado]

Cada regla de PF puede desempeñar dos acciones: block y pass (bloquear y dejar pasar). Como ya se ha comentado, las directivas de bloqueo afectan al comportamiento de la accción block.

Sin embargo, puede modificar el comportamiento que esta acción tendrá en algunas reglas si incluye la palabra clave block junto con la acción a realizar, por ejemplo block drop o bien block return. Además, tambien puede utilizar block return-icmp, con lo que, por defecto, se informará de que no se puede llegar al destino solicitado. También podrá indicar el tipo del mensaje ICMP que se incluirá en la información devuelta.

La mayoría de las veces le interesará comenzar con reglas de bloqueo; así, sólo tendrá que añadir una regla para cada tipo de tráfico que desee dejar pasar a través del cortafuego.

Incluya la siguiente línea en el archivo /etc/pf.conf si quiere bloquear el tráfico a través de todas las interfaces de red:

block all

Después podrá añadir las reglas que permitan el paso a través del cortafuegos. Primero, indique que no desea filtrar el tráfico a través de la interfaz bucle:

pass quick on lo0 all

Fíjese en que se utiliza la palabra clave quick. Normalmente, PF pasará por todas las listas de reglas incluso si alguna ya permitió el paso del paquete en cuestión, para ver si existe alguna regla más concreta posteriormente que lo descarte. La palabra clave quick modifica este comportamiento, de manera que PF mismo, llevando a cabo la acción que esa regla describa. Si se utiliza con cuidado, esta regla puede mejorar el rendimiento del cortafuegos.

Utilice la palabra clave antispoof para evitar que sistemas del exterior intenten suplantar alguna dirección de la red interna:

antispoof quick for $IF_INT inet

A continuación, impida el acceso a través de la interfaz de red externa de cualquier tráfico que proceda de las direcciones IP que no admiten enrutamiento según RFC 1918. Estos paquetes, a menos que se indique lo contrario posteriormente, serán atrapados por al directiva de bloqueo predeterminada.
 Sin embargo, puede mejorar el rendimiento del sistema si utiliza una regla que elimine específicamente estos paquetes utilizando la palabra clave quick:

block drop quick on $IF_EXT from any to

Si desea permitir la entrada de tráfico dirigido a un determinado servidor Web (por ejemplo, 192.168.1.20), utilice una regla como ésta:

pass in on IF_EXT proto tcp from any to 192.168.1.20 port 80 \
modulate state flags S/SA

Así sólo permitirá la entrada de aquellos paquetes destinados al puerto 80 de 192.168.1.20 que intenten establecer una nueva conexión (es decir, aquellos en los que SYN esté activo), cuya información se guardará en la tabla de estados. La palabra modulate le permite garantizar que se genere un valor de secuencia inicial (ISN, initial sequence number) de alta calidad, algo de vital importancia si el sistema operativo que se esté utilizando en cualquiera de los dos extremos de la conexión utiliza un algoritmo de poca calidad para generar sus propios ISN.

De igual forma, si desea permitir el tráfico hacia y desde un determinado servidor de correo electrónico (digamos, aquel con la IP 192.168.1.21), use esta regla:

pass in on $IF_EXT proto tcp from any to 192.168.1.21 \
port { smtp, pop3, imap2, imaps } modulate state flags S/SA

Fíjese en que puede utilizar varios puertos en una misma regla si los separa con comas y los rodea de llaves.

También puede utilizar los nombres de los servicios, tal y como aparezcan en el archivo /etc/services, en lugar de sus números.
Para permitir el acceso a un determinado servidor DNS (el que está ubicado en 192.168.1.18, por ejemplo), añada una regla como la siguente:

pass in on $IF_EXT proto tcp from any to 192.168.1.18 port 53 \
modulate state flags S/SA

Si lo deja así, el cortafuegos bloqueará el tráfico UDP del servidor de nombres. Para permitirlo, añada la siguiente regla:

pass in on $IF_EXT proto udp from any to 192.168.1.18 port 53 \
keep state

Es interesanet destacar que se utiliza la palabra clave state, aun tratándose de una regla para bloquear paquetes UDP. En este caso, PF mantendrá un registro de la conexión utilizando las direcciones de origen y destino, así como los números de puerto.

Además, la palabra modulate no se puede utilizar porque los datagramas UDP no contienen números de secuencia. En su lugar, utilice keep state para que se guarde un registro del estado de la comunicación cuando no se realice una modulación del ISN. Y como los datagramas UDP no contienen indicador alguno, no tiene más que omitirlos.

Permita ahora el paso a través de cortafuegos de conexiones que se inicien en la red externa. Para conseguirlo tendrá que añadir la siguiente regla, que permite el tráfico entrante proveniente de las interfaces internas del cortafuego.

pass in on $IF_INT from $IF_INT:network to any
pass out on $IF_INT from any to $IF_INT:network
pass out on $IF_EXT proto tcp all modulate state flags S/SA
pass out on $IF_EXT proto { icmp, udp } all keep state

pOf, la popular herramienta de identificación pasiva de sistemas operativos, está integrada en las últimas versiones de PF. Esto permite que PF pueda averiguar qué sistema operativo se está utilizando en aquellos equipos que intenten que el tráfico que generan llegue o atraviese el ordenador en el que PF está funcionando. En consecuencia, podrá crear reglas específicas para un determinado sistema operativo. Por ejemplo, si quiere bloquear el tráfico de cualquier sistema operativo que no sea Linux, utilice algo como esto:

block in
pass in from any os "Linux"

Pero tenga presente que la detección de sistemas operativos dista mucho de ser perfecta.

Una vez que haya terminado de editar el contenido de pf.conf, active PF mediante las siguientes órdenes:

# pfctl -e
# pfctl -f /etc/pf.conf

La primera línea inicia PF, mientras que la segunda le indica dónde está el archivo de configuración que debe utilizar. Si realiza alguna modificación en dicho archivo mientras PF está funcionando sólo tendrá que volver a ejecutar la orden pfctl -f /etc/pf.conf.

Si quiere que PF se ejecute automáticamente cuando FreeBSD se inicie, añada la siguiente línea al archivo /etc/rc.conf:

pf_enable="YES"
gateway_enable="YES" # Enable as LAN gateway

Pfctl comandos:

# pfctl -f /etc/pf.conf -> Carga el archivo pf.conf
# pfctl -nf /etc/pf.conf -> Verifica el archivo pero no carga las reglas del mismo
# pfctl -Nf /etc/pf.conf -> Carga solo las reglas de NAT
# pfctl -Rf /etc/pf.conf -> Carga solo las reglas de Filtrado
# pfctl -sn -> Muestra las reglas de NAT que estan vigentes
# pfctl -sr -> Muestra las reglas de filtrado que estan vigentes
# pfctl -ss -> Muestra tabla de estado
# pfctl -sa -> Muestra TODO lo que es posible

https://www.freebsd.org/doc/handbook/firewalls-pf.html

Unix es genial!.

NFS4 Synology Clientes Unix


Montar directorios del servidor Synology en clientes Unix, Linux.

Habilitar NFS en Synology desde el navegador:
https://192.168.1.254:5001

user admin
password ************

Activar NFS en synology (ayuda de DSM)

Servicio NFS

El servicio NFS permite a los clientes de Linux y Unix acceder al dispositivo Synology NAS.

Para habilitar el servicio NFS:
Vaya a Panel de control > Servicios de archivos > Win/Mac/NFS y marque Habilitar NFS.
Haga clic en Aplicar.

Vaya al Panel de control > Carpeta compartida. Seleccione una carpeta compartida y haga clic en Editar para administrar las reglas de NFS y regular los derechos de acceso de clientes Linux a esta carpeta compartida.

Para habilitar la compatibilidad con NFSv4:
Marque Habilitar la compatibilidad NFSv4.

Haga clic en Aplicar.

Los equipos involucrados deben estar en la misma subred local. Por tanto, vamos a cambiar de subred el servidor Synology de la 192.168.1.0/24 a la 192.168.3.0/24 yo lo haré desde la consola vía SSH pero es posible realizarlo de forma gráfica vía navegador web.

Entrar al servidor Synology como root y editar los archivos correspondientes no sin antes hacer una copia del fichero original:






Reiniciar Synology



Agregar al fichero /etc/rc.conf del cliente FreeBSD
nfs_client_enable="YES"


ds112plus:/volume1/freebsd-client on /media/ds112plus (nfs)


Unix es genial!.

viernes, 28 de febrero de 2014

Alinear particiones SSD con Gpart

Alinear particiones SSD con Gpart para optimizar el rendimiento de un disco SSD.

La utilidad gpart se utiliza para dividir los proveedores GEOM, normalmente discos


Este proceso de particinado y agregar soporte TRIM puede realizarse en el entorno gráfico durante durante la instalación de FreeBSD eligiendo particionado manual.

Tabla de partición GUID (GPT) es un estándar para la colocación de la tabla de particiones en un disco duro. Es parte del estándar EFI y Permite un tamaño de partición de 9.4 ZB y 128 slices.

Listar particiones:

$ ls /dev/da0*
/dev/da0   /dev/da0p2 /dev/da0p4 /dev/da0p6
/dev/da0p1 /dev/da0p3 /dev/da0p5

Listar la tabla de particiones:

$ gpart show da0

# gpart delete -i 1 da0
da0p1 deleted
# gpart delete -i 2 da0
da0p2 deleted
# gpart delete -i 3 da0
da0p3 deleted
# gpart delete -i 4 da0
da0p4 deleted
# gpart delete -i 5 da0
da0p5 deleted
# gpart delete -i 6 da0
da0p6 deleted

# gpart create -s gpt da0

# gpart show da0
=>  34  234441577  da0  GPT  (111G)
34  234441577 - free -  (111G)

Vamos a crear las particiones, si usted utiilza particiones separadas para usr, var y tmp deberá crearlas utilizando el mismo método:
# gpart add -s 64k -t freebsd-boot -l boot0 da0
# gpart add -s 8G -t freebsd-swap -l swap0 da0
# gpart add -t freebsd-ufs -a 4k -l root0 da0

# -- Install boot code
gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da0

Crear sistema de ficheros:
# newfs -U -L root /dev/da0p3
/dev/da0p3: 110377.4MB (226052832 sectors) block size 32768, fragment size 4096
using 177 cylinder groups of 626.09MB, 20035 blks, 80256 inodes.
with soft updates
super-block backups (for fsck_ffs -b #) at:
 192, 1282432, 2564672, 3846912, 5129152, 6411392, 7693632,
....

No hara falta alinear las particiones de arranque o de intercambio, ya que no cuentan con sistemas de archivos "reales". Si está utilizando particiones separadas para /var /usr /tmp deberá crearlas siguiendo el mismo método:

# gpart show da0
=>   34  234441577  da0  GPT  (111G)
34 128 1  freebsd-boot  (64k)
162  8388608  2  freebsd-swap  (4.0G)
8388770  6   - free -  (3.0k)
8388776  226052832    3  freebsd-ufs  (107G)
234441608  3  - free -  (1.5k)

Eliminar index, slice, particiones:

Eliminar particiones
$ gpart delete -i 1 da0s1

Destruir slices
$ gpart destroy da0s1

Eliminar GEOM label,
$ gpart delete -i 1 da0

Destruir GEOM label,
$ gpart destroy da0

Comprobar tabla de particioines:
$ gpart show da0

y
$ gpart list


Unix es genial!.

viernes, 7 de febrero de 2014

Encriptar con geli FreeBSD

Encriptar disco duro usb con geli:

Geli es una clase GEOM criptográfica que utiliza el framework crypto y entre otras características, soporta múltiples algoritmos criptográficos (AES, Blowfish y 3DES).

Conectar un disco duro externo a un puerto usb, se creará el dispositivo /dev/da0.

Habilitar soporte para geli en del kernel de FreeBSD

options    GEOM_ELI
device     crypto

Recompilar el kenel y reiniciar con el nuevo kernel.

Cargar el nuevo múdulo geli en el arranque añadiendo la siguiente línea al archivo /boot/loader.conf

geom_eli_load="YES"

Generar la clave maestra

Generar una archivo un archivo de clave que se utilizará como parte de la clave maestra para el proveedor de cifrado montado en /private. El archivo de clave algunos datos aleatorios que se utilizan para encriptar la clave maestra. La clave principal también estará protegida por una contraseña. El tamaño del sector del proveedor /dev/da0.eli será de 4kb

# dd if=/dev/random of=/root/safe/da0.key bs=64 count=1

Inicializar el proveedor que necesita ser encriptado. Aquí se puede
configurar el algoritmo criptográfico a usar, longitud de la clave, etc:

# geli init -s 4096 -K /root/safe/da0.key bs=64 count=1

Comprobar el sistema de archivos:


Conectar el proveedor con la clave generada:
# geli atach -k /root/safe/da0.key /dev/da0

# ls /dev/da0*
da0 da0.eli

Crear un nuevo sistema de archivos:

# dd if=/dev/random of=/dev/da0.eli bs=1m
# newfs /dev/da0.eli


# mount /dev/da0.eli /private

El sistema de archivos cifrado ahora es visible y disponible para su uso

# df -h


Desmontar y desconectar del proveedor:
Una vez terminado el trabajo sobre la partición cifrada, es prudente desmontar y separar la partición cifrada geli del kernel (en este caso desconectar el disco duro usb):

# umount /private/
# geli detach da0.eli

Conectar de nuevo:
# geli attach -k /root/safe/da0.key /dev/da0
Enter passphrase:

# umount /private
# geli detach da0.eli

Utilizar solo password:

Es más conveniente para cifrar una memoria USB o una imagen de archivo basada sólo en una fase de contraseña sin clave. En este caso no es necesario llevar el archivo de clave adicional para acceder al contenido del disco. El procedimiento es en gran medida el mismo que el anterior, sólo sin el archivo de clave. Vamos a encriptar un archivo basado en imagen /cryptedfile de 1 GB.

# dd if=/dev/zero of=/cryptedfile bs=1M count=1000
# mdconfig -at vnode -f /cryptedfile


# geli init /dev/da0
# geli attach /dev/da0

# newfs -U -m 0 /dev/da0.eli
# mount /dev/da0.eli /private
# geli detach da0.eli

Ahora es posible mountar esta imagen en otro sistema de solo con el password:
# mdconfig -at vnode -f /cryptedfile
# geli attach /dev/ad0
# mount /dev/da0.ali /private


Fuente:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/disks-encrypting.html
http://bsdtutorial.org/
http://cb.vu/unixtoolbox_pt.xhtml

Unix es genial!.

martes, 4 de febrero de 2014

pure-ftpd FreeBSD

Configuración de un servidor FTP Pure-ftpd con usuarios virtuales

Pure-ftpd es un país libre (BSD), con calidad de producción segura y servidor FTP estándar conforme.

Esta guía proporciona instrucciones para utilizar el sistema de usuario virtual para gestionar y controlar a los usuarios. Mediante el uso de usuarios virtuales, cuentas FTP se pueden administrar sin afectar las cuentas del sistema.

Iniciar la instalación de Pure-ftpd:

# portsnap
# cd /usr/ports/ftp/pure-ftpd
# make config-recursive

Un menú emergente contiene opciones de compilación de Pure-ftpd. Es posible incluir y excluir opciones. En mi caso, he optado por dejar estas opciones en sus valores por defecto.

# ee /var/db/ports/pure-ftpd/options
WITH_UTF8=true
WITH_LARGEFILE=true

# make install clean distclean
# rehash

Al finalizar el proceso de instalación empezaremos copiando el archivo
de configuración de ejemplo y establecer los permisos adecuados:

# cd /usr/local/etc
# cp pure-ftpd.conf.sample pure-ftpd.conf
# chmod 444 pure-ftpd.conf

Ajustar valores net.inet.ip.portrange.{first,last} en /etc/sysctl.conf


Fase de configuración:

# ee pure-ftpd.conf
# Rango de puertos para conexiones de respuestas pasivas. - Para los
# cortafuegos.
PassivePortRange 30000 30900

# Dirección IP/puerto para escuchar (default = todas IP y puerto 21).
# Bind 127.0.0.1,21

# Si desea registrar todos los comandos del cliente, ajústelo a "sí".
# Esta directiva puede ser duplicado para también registrar
# las respuestas del servidor.
VerboseLog yes

# PureDB base de datos de usuario (see README.Virtual-Users)
PureDB /usr/local/etc/pureftpd.pdb

# Crear un archivo de registro adicional con transferencias
# registradas en el estándar W3C Formato # (compatible con
# la mayoría de los analizadores de registros comerciales)
AltLog w3c:/var/log/pureftpd.log

# Creación automática de los directorios de inicio si se han perdido
CreateHomeDir yes

# No permitir conexiones anónimas. Sólo permitirá a los usuarios autenticados.
NoAnonymous yes

# No permitir a los usuarios anónimos para subir nuevos archivos
# (no = se permite cargar)
AnonymousCantUpload yes

# Número máximo de clientes sim con la misma dirección IP
MaxClientsPerIP  5

# Máximo numero de usuarios simultaneos
MaxClientsNumber  50

# Máscara de creación de archivos. :
# 177:077 si se siente paranoico.
Umask  022:022

# UID mínimo para un usuario autenticado que entrar
MinUID  100

La opción CreateHomeDir permite añadir usuarios virtuales más fácil mediante la creación del directorio principal de un usuario al iniciar sesión por primera vez.

Existe la posibilidad de importar usuarios con cuentas en el sistema (definidos en /etc/master.passwd) a la vez o crear nuevos usuarios de forma manual. Para importar los usuarios que ya existen en el sistema a usuarios virtuales FTP con la herramienta pure-pwconvert:

# pure-pwconvert >> /usr/local/etc/pureftpd.passwd
# chmod 600 /usr/local/etc/pureftpd.passwd
# pure-pw mkdb

No olvidemos que la pure-pwconvert sólo importa las cuentas que tienen
acceso a una consola. Las cuentas con la shell establecida a nologin
se tienen que añadir de forma manual.

Para agregar usuarios a la base de datos de usuarios virtual Pure-FTPd
manualmente, tenemos que crear una cuenta a nivel de sistema que se
asociará con los usuarios virtuales. Crear un nuevo usuario llamado ftp:

Crear una cuenta a nivel de sistema:
# pw useradd -n ftp -s /sbin/nologin -w no -d /home/ftp -c "FTP user" -m

Nota: Al instalar pureftp, se crea un grupo de ftp, pero ningún usuario ftp, lo que da como resultado el error "mail pure-ftpd:(?:?) [ERROR] Unable to find the 'ftp' account". So we need to manually create the ftp user.

Llegados a esta punto, ahora podemos agregar usuarios a la base de datos de usuarios virtuales utilizando los siguientes comandos:

Agregar usuarios a la base de datos de usuarios virtuales:
# pure-pw useradd ftpuser1 -u ftp -g ftp -d /home/ftp/ftpuser1
# pure-pw mkdb

# pure-pw useradd ftpuser2 -u ftp -g ftp -d /home/ftp/ftpuser2
# pure-pw mkdb

Permitir direcciones IP de clientes:
# pure-pw usermod remote_user -r 95.21.88.35
# pure-pw mkdb

Restablecer la contraseña del usuario ftpuser2: 
# pure-pw passwd fptuser2
# pure-pw mkdb

Ver información acerca del usuario ftpuser1
# pure-pw show fptuser1

Para ver una lista de los usuarios: 
# pure-pw list

Eliminar el usuario ftpuser2
# pure-pw userdel fptuser2
# pure-pw mkdb

Iniciar Pure-FTPd: 
# /usr/local/etc/rc.d/pure-ftpd onestart

Determinar si pure-ftpd se está ejecutando:


Probando el servidor FTP:

 

Para que Pure-FTPd se inicie durante el arranque:
# echo 'pureftpd_enable="YES"' >> /etc/rc.conf

Reiniciar pure-ftpd
# /usr/local/etc/rc.d/pure-ftpd restart


Rotar archivo de registro pure-ftpd: 
# vim /etc/newsyslog.conf
/var/log/pureftpd.log 600 7 100000 * JC /var/run/pure-ftpd.pid

# /etc/rc.d/newsyslog restart

Pure-ftpd proporciona características útiles para los usuarios personales, así como los proveedores de alojamiento. Esta es solo una configuración básica, para más opciones de configuración visite la página web del proyecto.

Fuente:
http://download.pureftpd.org/pub/pure-ftpd/doc/FAQ
http://www.pureftpd.org/project/pure-ftpd/doc
http://forums.freebsd.org/showthread.php?t=591


Unix es genial!.