Как защитить сетевые службы с помощью TCP-оболочек в Linux
В этой статье мы объясним, что такое TCP-обертки и как их настроить для ограничения доступа к сетевым службам, работающим на сервере Linux. Однако прежде чем мы начнем, мы должны уточнить, что использование оболочек TCP не устраняет необходимость в правильно настроенном брандмауэре.
В этом отношении вы можете думать об этом инструменте как о списке управления доступом на основе хоста, а не как о конечной мере безопасности для вашей системы. Используя брандмауэр и оболочки TCP, вместо того, чтобы отдавать предпочтение одному другому, вы будете уверены, что на вашем сервере не останется ни одной точки отказа.
Понимание Hosts.allow и Hosts.deny
Когда сетевой запрос достигает вашего сервера, оболочки TCP используют hosts.allow
и hosts.deny
(именно в этом порядке), чтобы определить, следует ли разрешить клиенту использовать данную службу. .
По умолчанию эти файлы пусты, все закомментированы или не существуют. Таким образом, все разрешено через уровень оболочек TCP, и ваша система остается полагаться на брандмауэр для полной защиты. Поскольку это нежелательно по причине, указанной во введении, убедитесь, что оба файла существуют:
ls -l /etc/hosts.allow /etc/hosts.deny
Синтаксис обоих файлов одинаков:
<services> : <clients> [: <option1> : <option2> : ...]
где,
- services – список служб, разделенных запятыми, к которым должно применяться текущее правило.
клиенты представляют собой список разделенных запятыми имен хостов или IP-адресов, на которые распространяется правило. Допускаются следующие подстановочные знаки:
- ALL соответствует всему. Применяется как к клиентам, так и к услугам.
- LOCAL соответствует хостам без точки в их FQDN, например localhost.
- KNOWN указывает на ситуацию, когда известны имя хоста, адрес хоста или пользователь.
- НЕИЗВЕСТНО является противоположностью ИЗВЕСТНО.
- PARANOID приводит к разрыву соединения, если обратный поиск DNS (сначала по IP-адресу для определения имени хоста, затем по имени хоста для получения IP-адресов) в каждом случае возвращает другой адрес.
Возможно, вы захотите иметь в виду, что правило, разрешающее доступ к определенной службе в /etc/hosts.allow
, имеет приоритет над правилом в /etc/hosts.deny
, запрещающим это. Кроме того, если к одной и той же услуге применяются два правила, во внимание будет приниматься только первое.
К сожалению, не все сетевые службы поддерживают использование оболочек TCP. Чтобы определить, поддерживает ли их данная служба, выполните следующие действия:
ldd /path/to/binary | grep libwrap
Если приведенная выше команда возвращает выходные данные, их можно обернуть в TCP. Примером этого являются sshd и vsftpd, как показано здесь:
Как использовать TCP-оболочки для ограничения доступа к службам
При редактировании /etc/hosts.allow
и /etc/hosts.deny
обязательно добавляйте новую строку, нажимая Enter после последней непустая строка.
Чтобы разрешить доступ по SSH и FTP только к 192.168.0.102 и localhost и запретить все остальные, добавьте эти две строки в /etc/hosts.deny
:
sshd,vsftpd : ALL
ALL : ALL
и следующую строку в /etc/hosts.allow
:
sshd,vsftpd : 192.168.0.102,LOCAL
#
hosts.deny This file contains access rules which are used to
# deny connections to network services that either use
# the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# The rules in this file can also be set up in
# /etc/hosts.allow with a 'deny' option instead.
#
# See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : ALL
ALL : ALL
#
hosts.allow This file contains access rules which are used to
# allow or deny connections to network services that
# either use the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : 192.168.0.102,LOCAL
Эти изменения вступают в силу немедленно, без необходимости перезагрузки.
На следующем изображении вы можете увидеть эффект удаления слова LOCAL
из последней строки: FTP-сервер станет недоступен для localhost. После того, как мы добавим подстановочный знак обратно, услуга снова станет доступной.
Чтобы разрешить все службы хостам, имя которых содержит example.com
, добавьте эту строку в hosts.allow
:
ALL : .example.com
и чтобы запретить доступ к vsftpd машинам на 10.0.1.0/24, добавьте эту строку в hosts.deny
:
vsftpd : 10.0.1.
В последних двух примерах обратите внимание на точку в начале и конце списка клиентов. Он используется для обозначения «ВСЕХ хостов и/или клиентов, имя или IP-адрес которых содержит эту строку».
Была ли эта статья полезна для вас? Есть ли у вас какие-либо вопросы или комментарии? Не стесняйтесь оставить нам сообщение, используя форму комментариев ниже.