Ограничить доступ к серверам 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 на пользователя/группу/систему