Linux hosts allow all

Как защитить сетевые службы с помощью TCP-оболочек в Linux

В этой статье мы объясним, что такое обертки TCP и как настроить их для настроенного брандмауэра.

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

Понимание hosts.allow и hosts.deny

Когда сетевой запрос достигает вашего сервера, TCP-оболочки используют hosts.allow и hosts.deny (в указанном порядке), чтобы определить, следует ли разрешить клиенту использовать данную службу. .

По умолчанию эти файлы пусты, все закомментированы или не существуют. Таким образом, все разрешено через уровень оболочек TCP, и вашей системе остается полагаться на брандмауэр для полной защиты. Поскольку это нежелательно, по причине, которую мы указали во введении, убедитесь, что оба файла существуют:

# ls -l /etc/hosts.allow /etc/hosts.deny

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

  1. услуги – список служб, разделенных запятыми, к которым должно применяться текущее правило.
  2. клиенты представляют собой список разделенных запятыми имен хостов или IP-адресов, на которые распространяется правило. Принимаются следующие подстановочные знаки:
    1. ALL соответствует всему. Применяется как к клиентам, так и к услугам.
    2. LOCAL соответствует хостам без точки в их FQDN, например, localhost.
    3. ИЗВЕСТНО указывает на ситуацию, когда имя хоста, адрес хоста или пользователь известны.
    4. НЕИЗВЕСТНО противоположно ИЗВЕСТНО.
    5. 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-адрес которых содержат эту строку».

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

    Источник

    Защити свой сервер с помощью 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) не дает вам гарантий в безопасности вашего сервера!

    Источник

    Настройка libwrap: /etc/hosts.allow и /etc/hosts.deny

    Как работают /etc/hosts.allow и /etc/hosts.deny? Все просто, вы вносите в эти файлы имя программы и хосты с которых доступ к программе будет разрешен или запрещен. Порядок такой: сначала срабатывают разрешительные правила в /etc/hosts.allow и, если совпадений не было найдено, то система перейдет в /etc/hosts.deny для поиска правил, блокирующих соединение. Если нигде не было найдено совпадений, доступ разрешается.

    Однако этот механизм постепенно выходит из моды и перестает поддерживаться многими дистрибутивами. Причин для этого много

    Причина 1. Преимущества перед файрволлами не очевидно. Слушаемый порт всегда заранее известен системному администратору, поэтому настроить фильтрацию по IP и порту не представляет труда. Зачем городить дублирующую функциональность?

    Причина 2. Чтобы /etc/hosts.allow и /etc/hosts.deny заработали, ваша программа должна быть собрана с поддержкой libwrap — библиотеки, которая осуществляет парсинг этих файлов и соответственно принимает решение об открытии соединения, или его завершении. В консервативных операционных системах действительно многие программы собраны с поддержкой libwrap, но, как уже было сказано, ситуация меняется. Проверить, собрана ли ваша программа с поддержкой libwrap можно командой ldd

    ldd /usr/sbin/sshd | grep libwrap

    Если вывод непустой, то можете переходить к настройке /etc/hosts.allow и /etc/hosts.deny. В CentOS версии 7 sshd еще поддерживал libwrap, а в CentOS версии 8 уже нет. Также libwrap не поддерживается большинством пакетов, собранных для ArchLinux

    Это ограничение сильно сужает круг программ, которые можно настроить, используя hosts.allow и hosts.deny. Ситуация, наверное была бы лучше, если бы libwrap был интегрирован в libc — библиотеку языка C, или сразу в ядро Linux, но он там нужен далеко не всем. См. причину 3

    Причина 3. Функционально libwrap ограничен. Например, nginx и apache имеют дублирующую функциональность на уровне своих собственных файлов конфигурации, предоставляющую расширенные средства управления доступом, не ограничевающиеся лишь IP адресом клиента. Собирать такие программы с поддержкой libwrap вряд ли имеет практический смысл

    Настройка libwrap, /etc/hosts.allow и /etc/hosts.deny

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

    # cat /etc/hosts.allow:
    sshd : 192.168.0.0/24

    # cat /etc/hosts.deny:
    ALL : ALL

    Такая комбинация разрешит подключение по SSH из сети 192.168.0.0/24 и никакой другой. Параметр «ALL» в /etc/hosts.deny — это специальное слово, означающее «все программы и все хосты». Очевидно, что такое правило срабатывает всегда независимо от того, нашлось ли совпадение в /etc/hosts.allow или нет. Есть и другие специальные слова, но круг их применения сильно ограничен.

    На заметку: старайтесь избегать указания имен хостов вместо адресов, так как это может вызвать существенную задержку в установлении соединения, если ваш DNS работает не очень хорошо

    Стоит упомянуть, что и /etc/hosts.allow, и /etc/hosts.deny поддерживают дополнительные параметры, которые также разделяются двоеточием. Например, можно выполнить некоторую комманду, когда срабатывает правило

    sshd : ALL : spawn /usr/bin/echo access attempt from %h >> /var/log/libwrap

    Такой конфиг обеспечит логирование IP адреса клиента, когда правило найдет свое совпадение. В данном случае «spawn» означает выполнить команду дополнительно, не вмешиваясь в процесс основной программы. Если использовать «twist» вместо «spawn«, основная программа будет подменена на указанную

    Источник

    Читайте также:  Linux цветной вывод консоль
Оцените статью
Adblock
detector