Настройка анонимного FTP сервера ProFTPd за NAT FreeBSD

Есть компьютер с FreeBSD за NAT, на нем нужно настроить внешний анонимный FTP сервер на базе ProFTPd.
конфигурируем proftpd сервер

cd /usr/ports/ftp/proftpd
make config
Вы увидите примерно такую картину:
┌────────────────────────────────────────────────────────────────────┐
│ Options for proftpd 1.3.3_5 │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [ ] BAN Include mod_ban (Requires CTRLS) │ │
│ │ [ ] CLAMAV Include mod_clamav │ │
│ │ [X] CTRLS Include controls │ │
│ │ [ ] EXEC Include mod_exec │ │
│ │ [X] HTMLDOCS Include HTML documentation │ │
│ │ [X] IFSESSION Include mod_ifsession │ │
│ │ [X] IPV6 Use IPv6 │ │
│ │ [ ] LDAP Use LDAP │ │
│ │ [ ] LDAP_TLS Use LDAP TLS (Requires LDAP, OPENSSL) │ │
│ │ [ ] MYSQL MySQL auth │ │
│ │ [X] NLS Use nls (builds mod_lang) │ │
│ │ [ ] ODBC ODBC │ │
│ │ [X] OPENSSL Include mod_tls │ │
│ │ [ ] PGSQL Postgres auth │ │
│ │ [X] QUOTA Include mod_quota │ │
├─└─────v(+)───────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
Опция NLS должна быть включена, она позволит нам правильно отображать русские имена файлов для глупых windows ftp клиентов.

Устанавливаем ProFTPd сервер

make build
make install
make clean

Подготавливаем среду для ProFTPd сервера

создаем пользователя ftp для анонимного ProFTPd сервера командой:
useradd

Оболочку ставим в nologin, аунтификацию по паролю отключаем.
Настраиваем ProFTPd сервер

Конфигурационный файл находится в /usr/local/etc/proftpd.conf
Пример конфигурационного файла с поясняющими комментариями.
# Имя FTP сервера, отображается в строке приветствия.
ServerName "Jakshi FTP Server"
# Кроме standalone есть возможность запуска сервера через inetd, но standalone удобней.
ServerType standalone
DefaultServer on
ScoreboardFile /var/run/proftpd/proftpd.scoreboard

# Port 21 is the standard FTP port.
Port 21

# Нужно указать доменное имя и ip адрес под которым сервер будет виден снаружи
MasqueradeAddress <Доменное имя>
MasqueradeAddress <Внешний IP>
# Нужно указать порты для пассивного соединения которые будут пробрасываться через NAT, желательно что бы портов было >100.
PassivePorts <начальный порт> <конечный порт>

# Some black magic, for further explanation see ProFTPd options guide http://www.proftpd.org/docs/directives/linked/by-name.html
IdentLookups off
UseReverseDNS off

UseIPv6 off

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022

# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances 30

CommandBufferSize 512

# Set the user and group under which the server will run.
User ftp
Group ftp

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
DefaultRoot ~

# Normally, we want files to be overwriteable.
AllowOverwrite on

# Bar use of SITE CHMOD by default
<Limit SITE_CHMOD>
DenyAll
</Limit>

RequireValidShell off

# С помощью этих параметров мы включаем перекодирование имен файлов записанных на локальной файловой системе в кодировке koi8-r в cp1251 для удобного их отображения для windows клиентов.
LangEngine on
UseEncoding KOI8-R CP1251

# Директория - домашняя директория пользователя ftp - в котором будут находиться файлы доступные для скачивания с анонимного FTP сервера
<Anonymous /usr/home/ftp>
User ftp
Group ftp

<Limit LOGIN>
AllowAll
</Limit>

AnonRequirePassword off

### We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp

### Limit the maximum number of anonymous logins
MaxClients 10 "Sorry, max $m users - try again later"

# Limit transfer rate to 60 KB/s, but first 3 MB on full speed.
TransferRate RETR 60:3145728

### We want 'welcome.msg' displayed at login, and '.message' displayed
### in each newly chdired directory.
# DisplayLogin welcome.msg
# DisplayFirstChdir .message

### Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>

Настраиваем систему для автозапуска ProFTPd сервера при старте и запускаем оный
echo 'proftpd_enable="YES"' >> /etc/rc.conf

Запускаем сервер:
/usr/local/etc/rc.d/proftpd start
Настраиваем NAT

Пользуясь средствами того NAT который используем, пробрасываем udp и tcp порты 20,21 и порты от и до тех что указали в PassivePorts в конфигурационном файле ProFTPd.
Кроме того, открываем доступ по этим портам в firewall.
Настраиваем ротацию логов

Добавляем в /etc/newsyslog.conf:
/var/log/proftpd.log 644 7 * $D0 J
Заключение

Все, можно выкладывать файлы для общего доступа в каталог /usr/home/ftp - и они будут доступны для загрузки из интернета.

http://jakshi.org.ua/dokuwiki/настройка_анонимного_ftp_сервера_proftpd_за_nat

Обновлено: 12.03.2015