On the road again

В статье рассмотрена настройка FTP сервера на базе ОС FreeBSD с помощью демона proftpd.

Установка

ProFTPd (http://www.proftpd.org/) - популярный ftp демон под *NIX.
Имеет гибкие настройки, стабилен в работе, быстр, достаточно безопасен, компилируется под многие платформы, имеет полезные расширения для работы с MySQL, LDAP и др. Альтернативы ему практически нет. Стандартный ftp FreeBSD уступает по функциональности и непригоден для большого ftp сервера.

Установку целесообразно производить из портов, предварительно обновив их.
cd /usr/ports/ftp/proftpd/
make all install
make clean


Проблем с установкой возникнуть не должно. Если отсутствует канал винтернет, можно установить из пакетов. Дополнительно можно собирать модули используя опцию make --with-modules=${MODULES}. Запуск возможен двумя способами: скриптом при старте системы, либо через inetd. В первом случае добавляем строку named_enable="YES" в конфигурационный файл /etc/rc.conf. Для второго способа редактируем /etc/inetd.conf, закомментируем две строки и допишем нашу:

ftp stream tcp nowait root /usr/local/libexec/proftpd proftpd
#ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
#ftp stream tcp6 nowait root /usr/libexec/ftpd ftpd -l


Эта строка позволит загружать демон при старте системы. Без перезагрузки можно послать процессу inetd kill -HUP.

Настройка

Вооружившись документацией (http://www.proftpd.org/docs/) по используемым  в конфигурационном файле директивам приступаем к настройке. Создаем конфиг и открываем его для редактирования.

cp /usr/local/etc/proftpd.conf.default /usr/local/etc/proftpd.conf
ee/usr/local/etc/proftpd.conf


# Имя сервера
ServerName "My FTP Server"
#Как запускается демон (в нашем случае через inetd)
ServerType inetd
DefaultServer on
ServerIdent off

#Если сервер в локальной сети, то можно руту дать возможность соединяться по
ftp (но лучше так не делать). В /etc/ftpusers закомментируем root
RootLogin on

#Стандартный FTP порт
Port 21

# Маска для ограничения создания директорий и файлов
Umask 022

# Пользователь и группа, под которой работает демон
User nobody
Group nogroup


# Ограничения при логине
MaxClients 15 "Слишком много соединений с сервером"
MaxClientsPerHost 4 "%m клиента уже подключены с Вашего хоста, больше не разрешено"
MaxLoginAttempts 3 "Слишком много попыток войти"


# Ограничение трафика. В данном случае мы ограничиваем закачку и
скачивание всем пользователям на 150k кроме root
TransferRate RETR,STOR,APPE 150 user !root

# Вывод сообщений при входе
DisplayConnect /etc/ftp_connect.msg
DisplayLogin /etc/ftp_login.msg
AccessDenyMsg "ATTENTION!!! ALL CONNECTIONS LOGGED"
AccessGrantMsg "Now apload/download files"
DisplayGoAway "Access Denied!"


#Возможно определить с каких ip соединения допустимы или запрещены
#UseHostsAllowFile /etc/proftpd.allow
#UseHostsDenyFile /etc/proftpd.deny


# Установим ограничения по времени
TimeoutIdle 180
TimeoutLogin 120
TimeoutNoTransfer 360
TimeoutStalled 640


# Chroot определенные группы на директории
#Для рута
DefaultRoot / wheel
#Для анонимных пользователей (директория определяется ниже)
DefaultRoot /путь.до.папки users
#Для других пользователей имеющих свою группу и доспупные только им
файлы и папки
DefaultRoot /путь.до.папки specialusers

# Логи
SyslogLevel notice
UseReverseDNS off
TransferLog /var/log/proftpd-tranfer.log
SystemLog /var/log/proftpd-error.log
#ExtendedLog /var/log/proftpd-extended.log read,write


# Normally, we want files to be overwriteable.
<Directory />
AllowOverwrite on
</Directory>


# Открываем доступ анонимным пользователям
<Anonymous /путь.к.директории.для.анонимных.пользователей>
User anonftp
Group nogroup
UserAlias anonymous anonftp
MaxClients 20 "Sorry, max %m users -- try again later"
DisplayFirstChdir .message
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>


Создаем необходимые файлы и директории.

touch /var/log/proftpd-error.log
touch /var/log/proftpd-tranfer.log

mkdir /var/run/proftpd/ && touch /var/run/proftpd/proftpd.scoreboard

Создаем аналогично файлы приветствий /etc/ftp_connect.msg и /etc/ftp_login.msg. Создаем пользователя anonftp, каталогом для
анонимного доступа укажем его домашний каталог(см. алиас выше).

Дополнительная информация

При запуске и отладке могут понадобиться некоторые ключи:

--help
--version
--list (список встроенных модулей)
--debug уровень (от 0 до 9)
--config имя-файла
--configtest (проверить синтаксис)
--nodaemon (вывод на stderr а не syslog)

Информацию по состоянию можно отследить пользуясь выводом логов и
дополнительными программами (ftpcount, ftptop, ftpwho).

tail -f /var/log/proftpd-error.log
tail -f /var/log/proftpd-tranfer.log


Анализаторы логов

Logwatch: http://bog.pp.ru/work/syslog.html#logwatch
The Webalizer: http://www.webalizer.org/
ftpweblog: http://www.nihongo.org/snowhare/utilities/ftpweblog/

Comments
0 #1 Christie 2017-02-21 00:36
Awesome post.

Comments are now closed for this entry