Защити свой сервер с помощью hosts.allow и hosts.deny
Специалисты, ответственные за безопасность сетей используют в своей работе различные инструменты, с помощью которых они защищают свою сеть и сервера от вторжений злоумышленников. Они пишут огромные по длине цепочки фильтра iptables и устанавливают новейшие брандмауэры..
Возможно вы тоже используете их в своей работе и также пишете длинные цепочки правил, забывая о том, что помочь вам обеспечить добавочную безопасность могут два файла, присутствующие в вашей системе — /etc/hosts.allow и /etc/hosts.deny.
После того, как TCP-пакеты были переданы компьютеру с Linux, среди других действий, их обрабатывают два файла — /etc/hosts.allow и /etc/hosts.deny. Эти два файла работают также как и стандартные правила брандмауэра. Первоначально демон tcpd обрабатывает пакеты пропуская их через содержимое файла hosts.allow, а затем через файл hosts.deny.
Запомните это, так как если вы что-то напутаете в их содержании, то можете потерять доступ к вашим серверам (если вы настраиваете их удаленно). Если демон не находит ничего соответствующего в hosts.allow, он переходит к обработке файла hosts.deny.
Синтаксис этих файлов очень прост:
служба: IP-адрес или имя хоста
Так, например, если мы хотим блокировать все smtp-пакеты, идущие к нашему серверу от mail.test.ru, нам необходимо ввести в файл hosts.deny следующую строчку:
Мы можем также указать вместо имени хоста и его IP-адрес (лучше всего физический, тем самым избегая проблем в безопасности DNS-сервера):
С успехом можно использовать и прекрасную возможность использования знака «.» в строке адреса, для обозначения сети. К примеру, если мы хотим разрешить доступ к нашему серверу по http из всей сети 192.168.10.0/24, то мы должны написать в hosts.allow следующее:
Также мы можем использовать этот знак, если хотим разрешить доступ к какой-либо службе всем компьютерам нашего домена, указав в hosts.allow следующее:
После этого все компьютеры домена test.ru будут иметь доступ к веб-службе на нашем сервере.
Ну, и самый простой способ (который как правило и употребляют новички-администраторы) — это указать:
эта запись сделает доступной для всех вашу службу mysql. Надеюсь, вы догадались в какой файл нужно поместить эту строчку?
Конечно же в /etc/hosts.deny! А вот в /etc/hosts.allow внести запись типа:
И тогда ваша mysql будет доступна для локальных приложений!
Помните — содержимое файлов /etc/hosts.allow и /etc/hosts.deny зависит только от ваших потребностей в защите вашего сервера. Пробуйте, по необходимости открывая или закрывая доступ к службам для тех или иных целей. Но не забывайте, что написание после знака «:» слова «ALL» (в файле /etc/hosts.allow) не дает вам гарантий в безопасности вашего сервера!
Как защитить сетевые службы с помощью TCP-оболочек в Linux
В этой статье мы объясним, что такое обертки TCP и как настроить их для настроенного брандмауэра.
В связи с этим вы можете рассматривать этот инструмент как максимальную меру безопасности для вашей системы. Используя брандмауэр и TCP-оболочки, вместо того, чтобы отдавать предпочтение одному перед другим, вы убедитесь, что ваш сервер не останется с единой точкой отказа.
Понимание hosts.allow и hosts.deny
Когда сетевой запрос достигает вашего сервера, TCP-оболочки используют hosts.allow и hosts.deny (в указанном порядке), чтобы определить, следует ли разрешить клиенту использовать данную службу. .
По умолчанию эти файлы пусты, все закомментированы или не существуют. Таким образом, все разрешено через уровень оболочек TCP, и вашей системе остается полагаться на брандмауэр для полной защиты. Поскольку это нежелательно, по причине, которую мы указали во введении, убедитесь, что оба файла существуют:
# ls -l /etc/hosts.allow /etc/hosts.deny
Синтаксис обоих файлов одинаков:
- услуги – список служб, разделенных запятыми, к которым должно применяться текущее правило.
- клиенты представляют собой список разделенных запятыми имен хостов или IP-адресов, на которые распространяется правило. Принимаются следующие подстановочные знаки:
- ALL соответствует всему. Применяется как к клиентам, так и к услугам.
- LOCAL соответствует хостам без точки в их FQDN, например, localhost.
- ИЗВЕСТНО указывает на ситуацию, когда имя хоста, адрес хоста или пользователь известны.
- НЕИЗВЕСТНО противоположно ИЗВЕСТНО.
- 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 . :
и следующую строку в /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 :
и чтобы запретить доступ к vsftpd для машин на 10.0.1.0/24, добавьте эту строку в hosts.deny :
В последних двух примерах обратите внимание на точку в начале и в конце списка клиентов. Он используется для обозначения «ВСЕХ хостов и/или клиентов, имя или IP-адрес которых содержат эту строку».
Была ли эта статья полезной для вас? У вас есть вопросы или комментарии? Не стесняйтесь, напишите нам, используя форму комментария ниже.