Поиск по сайту:

Ограничить доступ к серверам Linux с помощью TCP-оболочек

В этом руководстве мы узнаем, что такое TCP Wrappers, для чего они используются, как установить TCP Wrappers в Linux и как ограничить доступ. на серверы Linux с помощью TCP Wrappers.

Что такое TCP-обертки?

TCP Wrappers (также известный как tcp_wrapper) — это основанная на хосте система ACL (список управления доступом) с открытым исходным кодом, которая используется для ограничения сетевых служб TCP на основе имени хоста. , IP-адрес, сетевой адрес и т. д. Он решает, какому хосту следует разрешить доступ к определенной сетевой службе.

TCP Wrapper был разработан голландским программистом и физиком Wietse Zweitze Venema в 1990 году в Технологическом университете Эйндховена. Он поддерживал его до 1995 года, а затем выпустил под лицензией BSD в 2001 году.

Является ли TCP Wrappers заменой брандмауэров?

Нет. Имейте в виду, что TCP Wrapper не является полной заменой правильно настроенного брандмауэра. Это просто ценное дополнение повышения безопасности вашего Linux-сервера.

Некоторые дистрибутивы Linux, такие как Debian и Ubuntu, удалили TCP Wrappers из официальных репозиториев. Потому что последняя версия tcp_wrappers была выпущена 20 лет назад. На тот момент это был очень мощный инструмент для «блокировки всего трафика».

Однако сегодня мы можем сделать то же самое, используя брандмауэры/iptables/nftables для всего трафика на сетевом уровне или использовать аналогичную фильтрацию на уровне приложения. Но TCP Wrappers блокирует входящее соединение только на уровне приложения.

Если по какой-либо причине вы по-прежнему предпочитаете использовать TCP Wrappers, всегда рекомендуется использовать TCP Wrappers в сочетании с правильно настроенным брандмауэром и другими механизмами и инструментами безопасности для повышения безопасности вашего Linux-сервера.

Установите TCP-оболочки в Linux

TCP Wrappers доступен в официальных репозиториях большинства операционных систем Linux.

В зависимости от используемого вами дистрибутива Linux TCP Wrappers можно установить, как показано ниже.

В системах на базе Arch убедитесь, что репозиторий [Community] включен, и выполните следующую команду для TCP Wrappers в Arch Linux и его вариантах, таких как EndeavourOS и Manjaro Linux:

sudo pacman -S tcp-wrappers

В Fedora, RHEL, CentOS, AlmaLinux и Rocky Linux:

Убедитесь, что вы включили репозиторий [EPEL]:

sudo dnf install epel-release

А затем установите оболочки TCP с помощью команды:

sudo dnf install tcp_wrappers

В системах RHEL 6 вам нужно использовать yum вместо dnf для установки оболочек TCP.

sudo yum install tcp_wrappers

Настройка TCP-оболочек

TCP Wrappers реализует контроль доступа с помощью двух файлов конфигурации:

    /etc/hosts.allow,
    /etc/hosts.deny.

Эти два файла списка контроля доступа решают, разрешен ли конкретным клиентам доступ к вашему серверу Linux.

Файл /etc/hosts.allow

Файл /etc/hosts.allow содержит список разрешенных или запрещенных хостов или сетей. Это означает, что мы можем как разрешить, так и запретить подключения к сетевым службам, определив правила доступа в этом файле.

Файл /etc/hosts.deny

Файл /etc/hosts.deny содержит список хостов или сетей, которым запрещен доступ к вашему серверу Linux. Правила доступа в этом файле также можно настроить в /etc/hosts.allow с помощью параметра 'deny'.

Типичный синтаксис определения правила доступа:

daemon_list : client_list : option : option ...

Где,

  • daemon_list — имя сетевой службы, например SSH, FTP, Portmap и т. д.
  • clients_list - разделенный запятыми список допустимых имен хостов, IP-адресов или сетевых адресов.
  • options - необязательное действие, определяющее действие, которое должно быть выполнено при совпадении с правилом.

Синтаксис одинаков для обоих файлов.

Правила, которые следует запомнить

Прежде чем использовать TCP Wrappers, вам необходимо знать следующие важные правила. Помните, что TCP Wrapper обращается только к этим двум файлам (hosts.allow и hosts.deny).

  • Правила доступа из файла /etc/hosts.allow применяются в первую очередь. Они имеют приоритет над правилами в файле /etc/hosts.deny. Таким образом, если доступ к службе разрешен в файле /etc/hosts.allow, и правило, запрещающее доступ к этой же службе в файле /etc/hosts.deny, игнорируется. .
  • В обоих файлах (hosts.allow и hosts.deny) разрешено только одно правило для каждой службы.
  • Порядок правил очень важен. Будет учитываться только первое правило соответствия для данной услуги. То же самое относится и к обоим файлам.
  • Если ни в одном из файлов нет соответствующих правил для службы или ни один из файлов не существует, то доступ к службе будет предоставлен всем удаленным хостам.
  • Любые изменения в любом из файлов вступят в силу немедленно без перезапуска сетевых служб.

Ограничить доступ к серверам Linux с помощью TCP-оболочек

Рекомендуемый подход к защите сервера Linux — блокировать все входящие соединения и разрешить только несколько определенных хостов или сетей.

Для этого отредактируйте файл /etc/hosts.deny:

sudo vi /etc/hosts.deny

Добавьте следующую строку. Эта линия отказывает в подключении ко ВСЕМ сервисам и ВСЕМ сетям.

ALL: ALL

Затем отредактируйте файл /etc/hosts.allow:

sudo vi /etc/hosts.allow

и разрешите определенные хосты или сети по вашему выбору.

sshd: 192.168.43.192 192.168.43.193

Вы также можете указать действительные имена хостов вместо IP-адреса, как показано ниже.

sshd: server1.ostechnix.lan server2.ostechnx.lan

Альтернативно вы можете сделать то же самое, определив все правила (как разрешающие, так и запрещающие) в самом файле /etc/hosts.allow.

Отредактируйте файл /etc/hosts.allow и добавьте следующие строки.

sshd: 192.168.43.192 192.168.43.193
sshd: ALL: DENY

В этом случае вам не нужно указывать какое-либо правило в файле /etc/hosts.deny.

Согласно приведенному выше правилу, все входящие соединения будут запрещены для всех хостов, кроме двух хостов 192.168.43.192, 192.168.43.193.

Теперь попробуйте подключиться по SSH к вашему Linux-серверу с любого хоста, кроме указанных выше, вы получите следующую ошибку.

ssh_exchange_identification: read: Connection reset by peer

Вы можете проверить это из файлов журналов вашего сервера Linux, как показано ниже.

cat /var/log/secure

Пример вывода:

Jun 16 19:40:17 server sshd[15782]: refused connect from 192.168.43.150 (192.168.43.150)

Аналогичным образом вы можете определить правила для других служб, например vsftpd, в файле /etc/hosts.allow, как показано ниже.

vsftpd: 192.168.43.192 
vsftpd: ALL: DENY

Опять же, вам не нужно определять какие-либо правила в файле /etc/hosts.deny. В соответствии с приведенным выше правилом удаленному хосту с IP-адресом 192.168.43.192 разрешен доступ к серверу Linux через FTP. Всем остальным хостам будет отказано.

Кроме того, вы можете определить правила доступа в различных форматах в файле /etc/hosts.allow, как показано ниже.

sshd: 192.168.43.192               #Allow a single host for SSH service
sshd: 192.168.43.0/255.255.255.0        #Allow a /24 prefix for SSH
vsftpd: 192.168.43.192              #Allow a single host for FTP
vsftpd: 192.168.43.0/255.255.255.0          #Allow a /24 prefix for FTP
vsftpd: server1.ostechnix.lan                   #Allow a single host for FTP

Разрешить все хосты, кроме определенного хоста

Вы можете разрешить входящие соединения со всех хостов, но не с конкретного хоста. Скажем, например, чтобы разрешить входящие соединения со всех хостов в подсети 192.168.43 , но не с хоста 192.168.43.192, добавьте следующую строку в / etc/hosts.allow.

ALL: 192.168.43. EXCEPT 192.168.43.192

В приведенном выше случае вам не нужно добавлять какие-либо правила в файл /etc/hosts.deny.

Или вы можете указать имя хоста вместо IP-адреса, как показано ниже.

ALL: .ostechnix.lan EXCEPT badhost.ostechnix.lan

Более подробную информацию можно найти на страницах руководства.

man tcpd

Заключение

Как видите, защитить сетевые службы в ваших системах Linux с помощью TCP Wrappers очень просто! Но имейте в виду, что TCP Wrapper не является заменой брандмауэра. Его следует использовать в сочетании с межсетевыми экранами и другими инструментами безопасности.

Ресурс:

  • Википедия

Рекомендуется к прочтению:

  • Разрешить или запретить доступ по SSH определенному пользователю или группе в Linux
  • Ограничить количество входов по SSH на пользователя/группу/систему

Статьи по данной тематике