Linux

hosts.deny — Команда Linux — Команда Unix

Linux построен для серверов. Там нет никакого отрицания этого. В качестве серверной операционной системы Linux поставляется с файлами контроля доступа. Эти файлы, как следует из их названия, контролируют доступ к серверу со стороны компьютеров.

Hosts.deny файл один такой файл контроля доступа. Это позволяет автоматически блокировать доступ к вашему компьютеру с Linux, либо с одного компьютера, либо с широкого диапазона IP-адресов. По сути, файл hosts.deny является зеркальным отражением hosts.allow .

Использование файла hosts.deny в Linux

Начните с поиска и открытия файла hosts.deny. Вы можете найти его в /etc/hosts.deny. Откройте его в текстовом редакторе по вашему выбору. Nano является самым простым для новых пользователей.

sudo nano /etc/hosts.deny

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

Непосредственно ниже вы можете начать определять свои собственные правила. Самое простое правило, которое вы можете установить, также является самым ограничительным. Если вы хотите заблокировать весь трафик на ваш компьютер, установите следующее правило. Не сохраняйте это, если вы получаете доступ к компьютеру через SSH, вы будете заблокированы.

ВСЕ: ВСЕ

Первая часть правила позволяет вам указать, какие услуги охватывает правило. В данном случае это ключевое слово ALL , означающее, что оно охватывает все в системе.

Второе ключевое слово ALL указывает, к каким компьютерам или сетям применяется правило. В этом случае каждый компьютер пытается подключиться.

Каждое правило, что ваша запись hosts.deny будет следовать той же схеме. Вы перечислите сервисы, к которым применяется правило, а затем двоеточие. Затем вы перечислите компьютеры, на которые ориентировано правило.

Вы можете исключить некоторые компьютеры из правила, используя ключевое слово EXCEPT . Итак, возьмите правило ранее и разрешите трафик только с IP-адреса 192.168.1.110.

ALL: ALL, кроме 192.168.1.110

Теперь ни один компьютер не сможет подключиться, кроме одного на 192.168.1.110.

Вы также можете заблокировать всю сеть вместо одного IP. Итак, если вы хотите заблокировать весь локальный трафик, вы должны использовать диапазон IP-адресов, например:

ALL: 192.168.1.0/24

ИСКЛЮЧЕНИЕ работает здесь тоже.

ALL: 192.168.1.0/24, КРОМЕ 192.168.1.110

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

ВСЕ: МЕСТНОЕ, КРОМЕ 192.168.1.110

Все будут работать с доменными именами так же, как и с IP-адресами. Итак, если вы хотите заблокировать трафик из домена, вы должны использовать:

ВСЕ: .example.com

Вы также можете использовать ключевое слово EXCEPT здесь.

ВСЕ: .example.com, КРОМЕ тестирования.example.com

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

СШД: ВСЕ

Приведенное выше правило блокирует весь трафик SSH, но разрешает все остальное.

Вы можете также перечислить демонов для того же правила. Итак, если вы хотите заблокировать как SSH, так и входящий трафик FTP, вы должны использовать приведенное ниже правило.

sshd, in.ftpd: .example.com

Часть «in» в «in.ftpd» относится только к входящему FTP-трафику.

Это основы. Вы можете легко составить строгий свод правил с информацией выше. Однако, если вы хотите глубже погрузиться во все доступные опции и более технические аспекты файла контроля доступа, продолжайте читать полный технический анализ ниже.

Техническая неисправность hosts.deny

Эта страница руководства описывает простой язык управления доступом, основанный на шаблонах клиента (имя / адрес хоста, имя пользователя) и сервера (имя процесса, имя / адрес хоста). Примеры приведены в конце. Нетерпеливому читателю рекомендуется перейти к разделу ПРИМЕРЫ для быстрого ознакомления.

Расширенная версия языка управления доступом описана в документе  hosts_options (5). Расширения включаются во время сборки программы с помощью -DPROCESS_OPTIONS.

В следующем тексте  daemon  — это имя процесса сетевого демона, а  client  — это имя и / или адрес службы, запрашивающей хост. Имена процессов сетевого демона указываются в файле конфигурации inetd.

Файлы контроля доступа

Программное обеспечение контроля доступа проверяет два файла. Поиск останавливается на первом совпадении:

Доступ будет предоставлен, когда пара (демон, клиент) совпадет с записью в  файле /etc/hosts.allow .

В противном случае в доступе будет отказано, если пара (daemon, client) совпадет с записью в  файле /etc/hosts.deny .

В противном случае доступ будет предоставлен.

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

Правила контроля доступа

Каждый файл контроля доступа состоит из нуля или более строк текста. Эти строки обрабатываются в порядке появления. Поиск заканчивается, когда совпадение найдено.

Символ новой строки игнорируется, если ему предшествует символ обратной косой черты. Это позволяет разбивать длинные строки, чтобы их было легче редактировать.

Пустые строки или строки, начинающиеся с символа «#», игнорируются. Это позволяет вам вставлять комментарии и пробелы, чтобы таблицы было легче читать.

Все остальные строки должны соответствовать следующему формату, между [] необязательно:

daemon_list: client_list [: shell_command]

daemon_list  — это список из одного или нескольких имен процессов демона (значения argv [0]) или подстановочных знаков (см. ниже).

client_list  список из одного или нескольких хостов — имен, адресов хостов, шаблонов или групповых символов (см ниже) , который будет сравниваться с именем хоста клиента или адресом.

Более сложные формы  daemon @ host  и  user @ host  описаны в разделах, посвященных шаблонам конечных точек сервера и поиску имени пользователя клиента, соответственно.

Элементы списка должны быть разделены пробелами и / или запятыми.

За исключением поисков сетевых групп NIS (YP), все проверки контроля доступа не учитывают регистр.

Узоры

Язык управления доступом реализует следующие шаблоны:

Строка, которая начинается с `. ‘ персонаж. Имя хоста сопоставляется, если последние компоненты его имени соответствуют указанному шаблону. Например, шаблон `.tue.nl ‘соответствует имени хоста` wzv.win.tue.nl’.

Строка, которая заканчивается на `. ‘ персонаж. Адрес хоста сопоставляется, если его первые числовые поля соответствуют заданной строке. Например, шаблон `131.155. ‘ соответствует адресу (почти) каждого хоста в сети Эйндховенского университета (131.155.xx).

Строка, начинающаяся с символа `@ ‘, обрабатывается как имя сетевой группы NIS (ранее YP). Имя хоста сопоставляется, если оно является членом хоста указанной сетевой группы. Соответствия сетевых групп не поддерживаются для имен процессов демона или для имен пользователей клиента.

Выражение вида `nnnn / mmmm ‘интерпретируется как пара` net / mask’. Адрес хоста IPv4 сопоставляется, если `net ‘равно битовому AND адреса и’ mask ‘. Например, шаблон net / mask `131.155.72.0/255.255.254.0 ‘соответствует каждому адресу в диапазоне от` 131.155.72.0’ до `131.155.73.255 ‘.

Выражение вида `[n: n: n: n: n: n: n: n] / m ‘интерпретируется как пара` [net] / prefixlen’. Адрес хоста IPv6 совпадает, если префиксные биты net равны префиксным битам адреса. Например, шаблон [net] / prefixlen `[3ffe: 505: 2: 1 ::] / 64 ‘соответствует каждому адресу в диапазоне от 3ffe: 505: 2: 1 :: до 3ffe: 505: 2: 1: FFFF: FFFF: FFFF: FFFF.

Строка, которая начинается с символа `/ ‘, рассматривается как имя файла. Имя хоста или адрес совпадают, если оно соответствует какому-либо имени хоста или шаблону адреса, указанному в названном файле. Формат файла — ноль или более строк с нулями или более имен хостов или шаблонов адресов, разделенных пробелами. Шаблон имени файла можно использовать везде, где можно использовать имя хоста или шаблон адреса.

Подстановочные знаки `* ‘и`?’ может использоваться для сопоставления имен хостов или IP-адресов. Этот метод сопоставления нельзя использовать вместе с сопоставлением `net / mask ‘, сопоставление имени хоста начинается с`.’ или сопоставление IP-адреса, оканчивающееся на `. ‘.

Wildcards

Язык управления доступом поддерживает явные подстановочные знаки:

Все

Универсальный шаблон, всегда совпадает.

Местный

Соответствует любому хосту, имя которого не содержит символ точки.

неизвестный

Соответствует любому пользователю, имя которого неизвестно, и соответствует любому хосту, имя  или  адрес которого неизвестны. Этот шаблон следует использовать с осторожностью: имена хостов могут быть недоступны из-за временных проблем с сервером имен. Сетевой адрес будет недоступен, когда программное обеспечение не может определить, к какому типу сети оно обращается.

Известен

Соответствует любому пользователю, имя которого известно, и соответствует любому хосту, имя  и  адрес которого известны. Этот шаблон следует использовать с осторожностью: имена хостов могут быть недоступны из-за временных проблем с сервером имен. Сетевой адрес будет недоступен, когда программное обеспечение не может определить, к какому типу сети оно обращается.

параноик

Соответствует любому хосту, имя которого не совпадает с его адресом. Когда tcpd создается с -DPARANOID (режим по умолчанию), он отбрасывает запросы от таких клиентов даже перед просмотром таблиц контроля доступа. Сборка без -DPARANOID, когда вы хотите больше контроля над такими запросами.

операторы

КРОМЕ

Использование по назначению имеет вид: `list_1 EXCEPT list_2 ‘; эта конструкция соответствует всему, что соответствует  list_1,  если не соответствует  list_2 . Оператор EXCEPT может использоваться в daemon_lists и client_lists. Оператор EXCEPT может быть вложенным: если язык управления разрешит использование скобок, то `EXCEPT b EXCEPT c ‘будет анализироваться как` (EXCEPT (b EXCEPT c))’. 

КОМАНДЫ ШЕЛЛА

Если первое согласованное правило контроля доступа содержит команду оболочки, эта команда подвергается% замен (см. Следующий раздел). Результат выполняется   дочерним процессом / bin / sh со стандартным вводом, выводом и ошибкой, связанной с  / dev / null . Укажите `& ‘в конце команды, если вы не хотите ждать, пока она не завершится.

Команды оболочки не должны полагаться на параметр PATH в inetd. Вместо этого они должны использовать абсолютные пути или начинать с явного выражения PATH = любой другой.

Документ  hosts_options (5) описывает альтернативный язык, который использует поле команды оболочки другим и несовместимым способом.

% РАСШИРЕНИЯ

В командах оболочки доступны следующие расширения:

% a (% A) адрес хоста клиента (сервера).

% c Информация о клиенте: user @ host, user @ address, имя хоста или просто адрес, в зависимости от объема доступной информации.

% d имя процесса демона (значение argv [0]).

% h (% H) имя или адрес хоста клиента (сервера), если имя хоста недоступно.

% n (% N) имя хоста клиента (сервера) (или «неизвестно», или «параноик»).

% p идентификатор процесса демона.

% s Информация о сервере: daemon @ host, daemon @ address или просто имя демона, в зависимости от объема доступной информации.

% u Имя пользователя клиента (или «неизвестно»).

%% расширяется до одного символа `% ‘.

Символы в% расширениях, которые могут запутать оболочку, заменяются символами подчеркивания.

ОБРАЗЦЫ СЕРВЕРА

Чтобы отличить клиентов по сетевому адресу, к которому они подключаются, используйте шаблоны формы:

имя_процесса @ host_pattern: список_клиентов …

Host_pattern подчиняется тем же правилам синтаксиса, что и имена и адреса хостов в контексте client_list. Обычно информация о конечных точках сервера доступна только для сервисов, ориентированных на соединение.

КЛИЕНТ ИМЯ ПОЛЬЗОВАТЕЛЯ LOOKUP

Когда клиентский хост поддерживает протокол RFC 931 или одного из его потомков (TAP, IDENT, RFC 1413), программы-оболочки могут получать дополнительную информацию о владельце соединения. Информация об имени пользователя клиента, когда она доступна, регистрируется вместе с именем хоста клиента и может использоваться для сопоставления с такими шаблонами, как:

daemon_list: … user_pattern @ host_pattern …

Оболочки демона могут быть настроены во время компиляции для выполнения поиска по имени пользователя на основе правил (по умолчанию) или для постоянного опроса клиентского хоста. В случае поиска имени пользователя по правилам приведенное выше правило будет вызывать поиск имени пользователя только в случае  совпадения daemon_list  и  host_pattern .

Шаблон пользователя имеет тот же синтаксис, что и шаблон процесса демона, поэтому применяются те же шаблоны (членство в сетевой группе не поддерживается). Однако не стоит увлекаться поиском имени пользователя.

Информация о имени пользователя клиента не может быть доверенной, когда она больше всего необходима, то есть когда клиентская система была взломана. В общем, ALL и (UN) KNOWN являются единственными шаблонами имен пользователей, которые имеют смысл.

Поиск имени пользователя возможен только для служб на основе TCP и только в том случае, если на клиентском хосте запущен подходящий демон; во всех остальных случаях результат «неизвестен».

Хорошо известная ошибка ядра UNIX может привести к потере обслуживания, когда поиск по имени пользователя блокируется брандмауэром . Оболочка README документ описывает процедуру, чтобы узнать, есть ли у вашего ядра эта ошибка.

Поиск имени пользователя может вызвать заметные задержки для пользователей, не являющихся пользователями UNIX. По умолчанию время ожидания поиска имени пользователя составляет 10 секунд: слишком мало, чтобы справляться с медленными сетями, но достаточно долго, чтобы раздражать пользователей ПК.

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

daemon_list: @pcnetgroup ALL @ ALL

будет сопоставлять членов сетевой группы pc без поиска имени пользователя, но будет выполнять поиск имени пользователя со всеми другими системами.

ОБНАРУЖЕНИЕ АДРЕСНЫХ АКТИВНЫХ АТАК

Недостаток в генераторе порядковых номеров многих реализаций TCP / IP позволяет злоумышленникам легко выдавать себя за доверенных хостов и проникать, например, через службу удаленной оболочки. Служба IDENT (RFC931 и т. Д.) Может использоваться для обнаружения таких и других атак, связанных с подделкой адресов узлов.

Прежде чем принять запрос клиента, упаковщики могут использовать службу IDENT, чтобы выяснить, что клиент вообще не отправлял запрос. Когда клиентский хост предоставляет услугу IDENT, отрицательный результат поиска IDENT (клиент соответствует UNKNOWN @ host) является убедительным доказательством атаки спуфинга хоста.

Положительный результат поиска IDENT (клиент соответствует `KNOWN @ host ‘) менее заслуживает доверия. Злоумышленник может подделать как клиентское соединение, так и поиск IDENT, хотя сделать это намного сложнее, чем подделать только клиентское соединение. Может также случиться так, что сервер IDENT клиента лжет.

Поиск IDENT не работает со службами UDP.

Примеры

Язык достаточно гибок, чтобы различные типы политики контроля доступа можно было выразить с минимальными усилиями. Хотя язык использует две таблицы контроля доступа, наиболее распространенные политики могут быть реализованы с одной из таблиц, которые являются тривиальными или даже пустыми.

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

В примерах используются имена хостов и доменов . Их можно улучшить, включив информацию об адресе и / или сети / маске, чтобы уменьшить влияние временных сбоев поиска на сервере имен.

В основном закрыто

В этом случае доступ запрещен по умолчанию. Доступ разрешен только явно авторизованным хостам.

Политика по умолчанию (без доступа) реализована с помощью простого файла запрета:

/etc/hosts.deny: ВСЕ: ВСЕ

Это запрещает все услуги всем хостам, если им не разрешен доступ по записям в файле allow.

Явно авторизованные хосты перечислены в файле разрешения. Например:

/etc/hosts.allow: ALL: LOCAL @some_netgroup ALL: .foobar.edu ИСКЛЮЧИТЬ терминалserver.foobar.edu

Первое правило разрешает доступ с хостов в локальном домене (без `. ‘В имени хоста) и от членов  сетевой группы  some_netgroup . Второе правило разрешает доступ со всех хостов в  домене foobar.edu (обратите внимание на начальную точку), за исключением  Terminalserver.foobar.edu .

В основном открытый

Здесь доступ предоставляется по умолчанию; только явно указанные хосты получают отказ в обслуживании.

Политика по умолчанию (доступ предоставлен) делает файл разрешения избыточным, чтобы его можно было опустить. Явно неавторизованные хосты перечислены в файле deny. Например:

/etc/hosts.deny: ALL: some.host.name, .some.domain ALL EXCEPT in.fingerd: other.host.name, .other.domain

Первое правило запрещает некоторым хостам и доменам все сервисы; второе правило все еще разрешает запросы пальцев от других хостов и доменов.

Ловушки

Следующий пример разрешает запросы tftp от хостов в локальном домене (обратите внимание на начальную точку). Запросы от любых других хостов отклоняются. Вместо запрошенного файла злоумышленнику отправляется зондирование пальца. Результат отправляется суперпользователю.

/etc/hosts.allow:

in.tftpd: LOCAL, .my.domain 
/etc/hosts.deny:
in.tftpd: ALL: spawn (/ some / where / safe_finger -l @% h | \
/ usr / ucb / mail -s% d-% h root) &

Команда safe_finger поставляется с оболочкой tcpd и должна быть установлена ​​в подходящем месте. Это ограничивает возможный ущерб от данных, отправляемых удаленным сервером finger. Это дает лучшую защиту, чем стандартная команда пальцев.

Похожие посты
Linux

8 лучших окружений рабочего стола Linux

AndroidIphone и ipadLinuxWindows

Окончательное руководство по включению темного режима везде

LinuxКак сделать

Что такое Swappiness в Linux? (и как это изменить)

LinuxКак сделать

Как использовать команду ls для вывода списка файлов и каталогов в Linux