Зачем TLS соединение на FTP сервере?
Чтобы успокоить паранойю конечно -)! Но на самом деле, FTP протокол передаёт все данные в том числе пароль и логин в открытом виде. Если вдруг кто-то задастся целью перехватить ваше соединение с файловым сервером по этому протоколу, то увидит открытым текстом ваши данные для аутентификации, т.е. логин и пароль. Чтобы этого не случалось предлагается использовать защищенное соединение по средствам TLS.
Настройку ProFTPd в CentOS 6\7 с SSL\TLS приходится производить, прямо скажем, нередко и требуется чтобы установоленный FTP демон умел защищенное соединение. Впрочем это вполне логично, все большее количество пользователей и администраторов предпочитают CentOS.
Поделюсь с вами не только настройкой TLS для ProFTPd сервера, но и в целом нюансами его установки, настройки и если потребуется отладки в CentOS6\7.
Содержание
- 1. Ставим epel репозиторий
- 2. Устанавливаем ProFTPd
- 3. Редактируем конфиг proftpd
- 4. Включаем TLS для proftpd в sysconfig
- 5. Настройки firewall
- 6. добавляем proftpd в автозапуск
- 7. Ребут
- 8. отладка ProFTPd
1. Ставим epel репозиторий:
1.1 Ставим epel репозиторий на CentOS 6:
1 |
yum install epel-release -y |
1.2 Ставим epel репозиторий на CentOS 7:
1 |
yum install epel-release -y |
2. Устанавливаем ProFTPd
1 |
yum install proftpd proftpd-utils -y |
3. Редактируем конфиг ProFTPd
Настройки производятся в файле конфигурации ProFTPd – /etc/proftpd.conf
- Если анонимный доступ не требуется, то комментируем все строки внутри:
123<IfDefine ANONYMOUS_FTP>...</IfDefine> - Правим секцию отвечающую за TLS:
1234567891011TLSEngine on#TLSRequired offTLSRSACertificateFile /etc/pki/tls/certs/proftpd.crt.pemTLSRSACertificateKeyFile /etc/pki/tls/certs/proftpd.key.pemTLSCipherSuite ALL:!ADH:!DESTLSOptions NoCertRequestTLSVerifyClient off#TLSRenegotiate ctrl 3600 data 512000 required off timeout 300TLSLog /var/log/proftpd/tls.logTLSSessionCache shm:/file=/var/run/proftpd/sesscache- TLSRequired — комментируем, иначе будет работать только FTPS, не будет выбора.
- TLSRSACertificateFile и TTLSRSACertificateKeyFile — генерируем:
1openssl req -x509 -days 3650 -nodes -newkey rsa:1024 -keyout /etc/pki/tls/certs/proftpd.key.pem -out /etc/pki/tls/certs/proftpd.crt.pem && chmod 600 /etc/pki/tls/certs/proftpd.key.pem
- Добавляем в конфиг диапазон пассивных портов:
1sed -i '1a\PassivePorts 49152 65534' /etc/proftpd.conf
4. Включаем TLS для proftpd в sysconfig
1 |
sed -i.bak -r 's/PROFTPD_OPTIONS=""/PROFTPD_OPTIONS="-DTLS"/g' /etc/sysconfig/proftpd |
5. Настройки firewall
В CentOS 6 используется iptables, тогдка как в CentOS 7 firewalld по-умолчанию. Но firewalld может быть удален и вместо него установлен iptables. Ниже привожу настройки для обоих firewall’ов, но сам по привычке использую iptables в связке с CSF.
- Если решили избавиться от firewalld:
1234567yum install iptables-servicessystemctl mask firewalldsystemctl enable iptablessystemctl enable ip6tablessystemctl stop firewalldsystemctl start iptablessystemctl start ip6tables
5.1 Настройки iptables для ProFTPd
- Проверяем наличие ip_conntrack_ftp, если его нет добавляем:
12vi /etc/sysconfig/iptables-configIPTABLES_MODULES="ip_conntrack_ftp" - Разрешаем в iptables работу с портами 20, 21, 49152-65534:
123456iptables -A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"iptables -A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"iptables -A INPUT -p tcp -m tcp --sport 49152:65534 --dport 49152:65534 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"iptables -A OUTPUT -p tcp -m tcp --sport 49152:65534 --dport 49152:65534 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive inbound connections" - Сохраняем, перезапускаем:
1service iptables save; service iptables restart
5.2 Настройки firewalld для ProFTPd
- Аналогично добавляем порты:
1234firewall-cmd --permanent --add-port=21/tcpfirewall-cmd --permanent --add-service=ftpfirewall-cmd --permanent --add-port=49152-65534/tcpfirewall-cmd --reload
5.3 CSF — Config Server Firewall
- Правим конфиг CSF:
- Файл конфигурации лежит здесь:
1vi /etc/csf/csf.conf - Пример секции «SECTION:IPv4 Port Settings» из моего csf.conf. Не стоит это копировать, если не понимаете что делаете:
12345# Allow incoming TCP portsTCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,1500,49152:65534"# Allow outgoing TCP portsTCP_OUT = "20,21,22,25,53,80,110,113,443,993,995,1500,49152:65534"
- Файл конфигурации лежит здесь:
6. Добавляем ProFTPd в автозапуск
1 |
chkconfig proftpd on |
1 2 |
systemctl enable proftpd systemctl start proftpd |
7. Ребут
Если не сделать перезагрузку, то proftpd будет работать только по FTPS, только по FTP или будет невменяемая ошибка при корректных настройках. Решения без ребута не нашел, если знаете как, то напишите в комментах. В идеале это последний шаг.
1 |
reboot |
8. Отладка ProFTPd
Если что-то пошло не так, то это всегда можно проверить по логам:
- Для отладки proftpd сервера в /etc/proftpd.conf добавить строки:
1234DebugLevel 10SystemLog /var/log/proftpd/proftpd.logTransferLog /var/log/proftpd/xfer.logExtendedLog /var/log/proftpd/auth.log AUTH auth1touch /var/log/proftpd/proftpd.log /var/log/proftpd/xfer.log /var/log/proftpd/auth.log - Применяем изменения в конфиге:
1service proftpd reload - Смотрим:
1tail -f /var/log/proftpd/*
Если этого оказалось мало, то разумеется посетите родной сайт ProFTPd ProFTPd, отдкуда сможете почерпнуть еще больше информации по работе FTP\FTPS протоколов и настройке SSL\TLS соединения на вашем сервере или хостинге.