Сегодня я составлю для себя заметку, как следует подойти если нужно ограничить доступ к удаленной системе, к примеру у меня это сервисы на Ubuntu 18.04 Server amd64, в качестве одного из сервисов по обмену рабочими моментами между дизайнерами и программистами и подрядчиками используется FTP. Как я считаю, мало использовать длинные пароли, важно применять максимум защиты или выделить ограничения кто может подключаться и откуда. У меня есть практические и реальные наработки на этом счет, к примеру:

Но сегодня проработаю с каких IP адресов (будет работать если внешний IP с которого идет подключение имеет белый IP) можно взаимодействовать с сервисом ProFTPd. Я же имею несколько систем в интернете и настраиваю, что доступ только с них могу инициализировать подключение, как к сервисам так и сервисам компании. Так надежнее. Например:

Шаг №1: Чтобы ограничить доступ к сервиса только с определенного WAN-ip или сети:

ekzorchik@srv-bionic:~$ sudo nano /etc/proftpd/proftpd.conf
Include /etc/proftpd/modules.conf
# Отключаем использование протокола IPv6
UseIPv6 off
IdentLookups off
# Имя FTP-сервера
ServerName "srv-bionic"
# Режим запуска FTP-сервера
ServerType standalone
DeferWelcome off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
# Таймаут на передачу: вошел и не начал передачу выраженное в мили секундах
TimeoutNoTransfer 600
# Подвисание во время передачи файлов выраженное в мили секундах
TimeoutStalled 600
# Таймаут бездействия после входа выраженное в мили секундах
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
# Запретить закачивать файлы, начинающиеся на точку
DenyFilter \*.*/
DefaultRoot ~
AuthUserFile /etc/proftpd/ftpd.passwd
Port 21
# запрещаем подключаться от имени суперпользователя
RootLogin off
PassivePorts 49152 65534
<IfModule mod_dynmasq.c>
</IfModule>
# Максимальное количество дочерних процессов
MaxInstances 30
# Пользователь и группа, под которой работает демон
User proftpd
Group nogroup
# маска для ограничения создания директорий и файлов
Umask 022 022
# Разрешить перезаписывать существующие файлы
AllowOverwrite on
DebugLevel 10
TransferLog /var/log/proftpd/xfer.log
SystemLog /var/log/proftpd/proftpd.log
ExtendedLog /var/log/proftpd/auth.log AUTH auth
SetEnv TZ :/etc/localtime
<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>
<IfModule mod_ratio.c>
Ratios off
</IfModule>
<IfModule mod_delay.c>
DelayEngine on
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine off
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>
Include /etc/proftpd/tls.conf
Include /etc/proftpd/conf.d/
<Limit LOGIN>
Order allow,deny
Allow from 172.35.35.4,172.35.35.8
Deny from all
</Limit>

После не забываем сохранить внесенные изменения.

После перезапускаем proftpd-сервис:

ekzorchik@srv-bionic:~$ sudo systemctl restart proftpd.service

Этой конфигурацией я ограничиваю доступ к сервису на авторизацию только с IP адресов: 172.35.35.4 и 172.35.35.8. Если инициализировать подключение с другого IPадреса, то сервис сразу отобьет попытку авторизации:

ekzorchik@srv-lubuntu:~$ ftp 172.33.33.117

Connected to 172.33.33.117.

421 Service not available, remote server has closed connection

ftp>

а если с разрешенного — предложение на авторизацию будет:

ekzorchik@srv-nas:~$ hostname -I

172.35.35.4

ekzorchik@srv-nas:~$ ftp 172.33.33.117

Connected to 172.33.33.117.

220 ProFTPD 1.3.5e Server (srv-bionic) [172.33.33.117]

Name (172.33.33.117:ekzorchik): ftp1

331 Password required for ftp1

Password:

230 User ftp1 logged in

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> quit

221 Goodbye.

ekzorchik@srv-nas:~$

Исходя из этого ограничение на доступ может быть, либо:

  • #Конкретный IP адрес
    • 172.33.33.2
  • #Несколько конкретных IP-адресов
    • 172.33.33.2,172.33.33.3
  • #Доступ по маске
    • #172.33.33.0/24

Шаг №2: Чтобы ограничить доступ к сервиса только с определенного DNSсуффикса:

<Limit LOGIN>

Order allow,deny

Allow from .polygon.local

Deny from all

</Limit>

Тем самым только из локальной сети есть доступ по FTP

Шаг №3: Чтобы блокировать определенные IP адреса тем самым они никогда не смогут связаться к моим FTP сервисом, создадим класс блокировки и обозначим что им нельзя:

<Class blacklist>

From 172.35.35.0/24

From 172.39.35.0/24

</Class>

<Limit LOGIN>

Order deny,allow

DenyClass blacklist

AllowAll

</Limit>

ekzorchik@srv-bionic:~$ sudo systemctl restart proftpd.service

Проверяю:

ekzorchik@srv-nas:~$ hostname -I

172.35.35.4

ekzorchik@srv-nas:~$ ftp 172.33.33.117

Connected to 172.33.33.117.

421 Service not available, remote server has closed connection

ftp>

Доступ заблокирован с адреса 172.35.35.4 сети 172.35.35.0/24

Шаг №4: Чтобы ограничить доступ с определенных IP и с определенного логина, т. е. Должны соблюстись два условия:

ekzorchik@srv-bionic:~$ sudo nano /etc/proftpd/proftpd.conf

<Class WhiteIP>

From 172.35.35.4

</Class>

<IfUser ftp1,ftp3,ftpuser>

<Limit LOGIN>

AllowClass WhiteIP

DenyAll

</Limit>

</IfUser>

ekzorchik@srv-bionic:~$ sudo systemctl restart proftpd.service

Только с IP 172.35.35.4 и из под ftp1 (либо ftp3, ftpuser) можно будет авторизоваться на сервисе ProFTPd:

ekzorchik@srv-nas:~$ hostname -I

172.35.35.4

ekzorchik@srv-nas:~$ ftp 172.33.33.117

Connected to 172.33.33.117.

220 ProFTPD 1.3.5e Server (srv-bionic) [172.33.33.117]

Name (172.33.33.117:ekzorchik): ftp1

331 Password required for ftp1

Password:

230 User ftp1 logged in

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>

На заметку: За дополнительными способами разграничения доступа к сервису ProFTPd советую обратиться к официальному сайту раздела документации: https://www.proftpd.org/docs там вы сможете подчерпнуть больше информации.

Данной я заметкой я хотел составить наработку для последующего использования с учетом как хочу ограничивать доступ и добился этого. Теперь открыв ее получу желаемое и не буду заново читать документацию.

На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.