root  / my Debian tips&tricks  / Настройка ProFTPd 

Official Debian logo

ProFTPd - ftp сервер с поддержкой шифрования. Этот сервер подкупает простой настройкой и возможностью интеграции с mySQL для хранения пользователей.

1. Установим всё необходимое:

aptitude install proftpd-basic proftpd-doc proftpd-mod-msg proftpd-mod-mysql proftpd-mod-sqlite proftpd-mod-tar proftpd-mod-vroot 

2. Подготовим окружение:

2.1. mySQL

--
-- Структура таблицы `grouptable`
--

CREATE TABLE IF NOT EXISTS `grouptable` (
  `groupname` text,
  `gid` int(11) NOT NULL AUTO_INCREMENT,
  `members` text,
  `description` tinytext,
  PRIMARY KEY (`gid`),
  UNIQUE KEY `gid_2` (`gid`),
  KEY `gid` (`gid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10002 ;

--
-- Дамп данных таблицы `grouptable`
--

INSERT INTO `grouptable` (`groupname`, `gid`, `members`, `description`) VALUES
('admins', 10000, NULL, 'Administrators'),
('users', 10001, NULL, 'Ordinary users');

--
-- Структура таблицы `usertable`
--

CREATE TABLE IF NOT EXISTS `usertable` (
  `userid` text,
  `passwd` text,
  `homedir` text,
  `shell` text,
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `gid` int(11) DEFAULT NULL,
  `count` int(11) NOT NULL DEFAULT '0',
  `lastlogin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `lastlogout` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `expiration` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `disabled` tinyint(4) DEFAULT '0',
  `det_name` tinytext,
  `det_mail` tinytext,
  `det_adress` tinytext,
  `det_notes` tinytext,
  PRIMARY KEY (`uid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10003 ;

--
-- Структура таблицы `vhtable`
--

CREATE TABLE IF NOT EXISTS `vhtable` (
  `servername` varchar(255) NOT NULL DEFAULT '',
  `docroot` varchar(255) NOT NULL DEFAULT '',
  `user_id` int(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`servername`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Структура таблицы `xfer_stat`
--

CREATE TABLE IF NOT EXISTS `xfer_stat` (
  `userid` text,
  `file` text,
  `size` bigint(20) DEFAULT '0',
  `address_full` text,
  `address_ip` text,
  `command` text,
  `timespent` text,
  `time` text,
  `cmd` text,
  `dunno` text
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

2.2. Проброс портов

Если у Вас ftp-сервер стоит за фаерволом, то Вам необходимо пробросить порты для пассивного соединения при TLS. Например пробросим диапазон портов с 45000 по 65534.

2.3. Генерация ключей для tls

openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/cert.pem -keyout /etc/proftpd/ssl/key.pem

3. Настройки в proftpd.conf

Обратите внимание!

Я пишу тут только то, что я добавил/изменил в конфигурационном файле. Поэтому не стирайте свой конфигурационный файл. Просто пройдитесь по нему и измените некоторые параметры в соответствии с моими правками.

UseIPv6                    off
# закрыть пользователей в их домашних каталогах
DefaultRoot                ~

# порт 21 для ftp
Port                       21

# а вот собственно и порты, которые мы ранее пробрасывали
PassivePorts               45000 65534

# немного логов
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

# включаем конфиги для sql и tls
Include /etc/proftpd/sql.conf
Include /etc/proftpd/tls.conf

4. А вот sql.conf выкладываю полностью.

<IfModule mod_sql.c»

SQLBackend             mysql

SQLEngine              on

# SQLAuthenticate on
SQLAuthenticate users* groups*

SQLAuthTypes Backend

SQLConnectInfo         proftpd_admin@localhost proftpd_admin UC8n6sbNMUVPNrUn
SQLUserInfo            usertable userid passwd uid gid homedir shell
SQLGroupInfo           grouptable groupname gid members
SQLUserWhereClause     "disabled=0"

SQLLog PASS updatecount
SQLLog EXIT time_logout

# xfer Log in mysql
SQLLog RETR,STOR transfer1
SQLNamedQuery  transfer1 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'c', NULL" xfer_stat
SQLLOG ERR_RETR,ERR_STOR transfer2
SQLNamedQuery  transfer2 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'i', NULL" xfer_stat

# SQLLogFile /var/log/proftpd/sql.log

# Logs
TransferLog                     /var/log/proftpd/xfer.log
ExtendedLog                     /var/log/proftpd/access.log    WRITE,READ
ExtendedLog                     /var/log/proftpd/auth.log      AUTH
ExtendedLog                     /var/log/proftpd/paranoid.log  ALL
SQLLogFile                      /var/log/proftpd/mysql.log

</IfModule>

5. Конфигурация tls.conf.

<IfModule mod_tls.c>
TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
TLSProtocol                             SSLv23

TLSRSACertificateFile                   /etc/proftpd/ssl/cert.pem
TLSRSACertificateKeyFile                /etc/proftpd/ssl/key.pem

TLSOptions                              NoCertRequest EnableDiags NoSessionReuseRequired

TLSVerifyClient                         off
TLSRequired                             off

TLSRenegotiate                          required off
</IfModule>

6. Часть конфигурации modules.conf

LoadModule mod_tls.c

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

LoadModule mod_sftp.c
LoadModule mod_sftp_sql.c

7 Рестарт ProFTPd

/etc/init.d/proftpd stop && /etc/init.d/proftpd start
LJ