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

Как защитить сетевые службы с помощью 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> : ...]

где,

  1. services – список служб, разделенных запятыми, к которым должно применяться текущее правило.
  2. клиенты представляют собой список разделенных запятыми имен хостов или IP-адресов, на которые распространяется правило. Допускаются следующие подстановочные знаки:

    1. ALL соответствует всему. Применяется как к клиентам, так и к услугам.
    2. LOCAL соответствует хостам без точки в их FQDN, например localhost.
    3. KNOWN указывает на ситуацию, когда известны имя хоста, адрес хоста или пользователь.
    4. НЕИЗВЕСТНО является противоположностью ИЗВЕСТНО.
    5. PARANOID приводит к разрыву соединения, если обратный поиск DNS (сначала по IP-адресу для определения имени хоста, затем по имени хоста для получения IP-адресов) в каждом случае возвращает другой адрес.
  3. Наконец, необязательный список действий, разделенных двоеточиями, указывает, что должно произойти при срабатывании данного правила.

Возможно, вы захотите иметь в виду, что правило, разрешающее доступ к определенной службе в /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-адрес которых содержит эту строку».

Была ли эта статья полезна для вас? Есть ли у вас какие-либо вопросы или комментарии? Не стесняйтесь оставить нам сообщение, используя форму комментариев ниже.