Файл hosts в Linux
Система доменных имен DNS используется для определения, какой IP принадлежит к нужному домену в сети интернет. Когда какой-либо программе понадобится обратиться к сайту по его доменному имени, операционная система отправляет к DNS-серверу запрос, чтобы узнать, по какому IP ей дальше передавать пакеты. Но так происходит не всегда. Например, когда мы обращаемся к домену localhost, то всегда запрос отправляется нашему локальному компьютеру.
Всему причиной файл hosts. Если вы раньше пользовались Windows, то, наверное, уже слышали о таком файле. Там чаще всего он использовался для того, чтобы быстро заблокировать доступ к какому-либо ресурсу. Но применение его гораздо шире. В этой статье мы рассмотрим, как настроить файл hosts в Linux, а также какие возможности он нам предоставляет.
Разрешение доменных имён в Linux
Прежде чем мы перейдём к самому файлу hosts, нужно разобраться, как происходит поиск IP-адреса для доменного имени в Linux. Я говорил, что операционная система сразу же отправляет запрос DNS-серверу, но это не совсем так. Существует определённый порядок поиска, согласно которому он выполняется. Этот порядок установлен в конфигурационном файле /etc/nsswitch.conf
Здесь нас интересует строчка hosts. В ней в порядке очередности записаны службы, которые используются для поиска IP-адреса для доменного имени. Пункт files означает использование файла /etc/hosts, а dns — сервиса доменных имён интернета. Если files расположена перед hosts, это означает, что сначала система попытается найти домен в /etc/hosts, а уже потом по DNS. По умолчанию дело обстоит именно так.
Настройка файла hosts в Linux
Нужный нам файл находится в директории /etc/. Для его открытия можно использовать любой текстовый редактор как в командной строке, так и в графическом интерфейсе, только открывать его нужно с правами суперпользователя. Например, с помощью vim:
Синтаксис файла довольно простой. В нём находится несколько строчек с доменными именами и IP-адресами, которые нужно для них использовать. Каждая из них выглядит вот так:
ip_адрес домен алиас
Обычно первая же строчка создаёт правило для перенаправления всех запросов к домену localhost на локальный IP-адрес — 127.0.0.1:
Также в этом файле по умолчанию размещаются перенаправления для имени вашего компьютера и для IPv6-адресов. Вы можете создать свои настройки для любого нужного домена. Для этого нужно добавить строчку в конец файла. Например, направим все запросы к домену losst.pro на ip 127.0.0.1:
Обратите внимание, что здесь указывается только домен, без протокола. Префикс http или https указывать не нужно, иначе ничего работать не будет. А вот для поддомена www нужно создавать отдельную запись или записывать его в виде алиаса. Например:
127.0.0.1 losst.pro www.losst.pro
Теперь при запросе домена losst.pro будет открываться наш локальный IP. Чтобы вернуть доступ к оригинальному ресурсу, достаточно убрать добавленную строчку. Но вы можете использовать не только локальный адрес, но и любой другой. Это очень удобно, если вы только зарегистрировали домен и доменная зона ещё не успела обновиться, а вы уже хотите работать с новым сайтом. Просто добавьте данные в /etc/hosts и работайте как обычно.
Выводы
В этой небольшой статье мы разобрали, как выполняется настройка DNS через файл hosts Linux. Как видите, с его помощью вы можете блокировать доступ к нежелательным ресурсам, например, к которым программы не должны получить доступ, а также использовать его в работе веб-мастера.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Как защитить сетевые службы с помощью 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-адрес которых содержат эту строку».
Была ли эта статья полезной для вас? У вас есть вопросы или комментарии? Не стесняйтесь, напишите нам, используя форму комментария ниже.
Защити свой сервер с помощью 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) не дает вам гарантий в безопасности вашего сервера!