14.2. Управление доступом к хосту
14.2.1. iptables
iptables -- это программа настройки фильтрации пакетов для Linux версий 2.4 и выше. Ядро 2.4 (если быть точнее, 2.4.5) впервые было представлено (в виде опции) в Slackware версии 8.0, а используемым по умолчанию было сделано в Slackware 8.1. В этом разделе раскрываются только основы использования этой программы, более полную информацию вы можете получить на сайте http://www.netfilter.org/. Эти команды могут быть вставлены в скрипт /etc/rc.d/rc.firewall, который необходимо сделать исполняемым, чтобы эти правила вступили в силу во время загрузки. Учтите, что неверные команды iptables могут заблокировать для вас вашу собственную машину. Если только вы не уверены на 100% в своих знаниях, всегда проверяйте, есть ли у вас локальный доступ к машине.
Первым делом следует установить политику по умолчанию на DROP во всех цепочках для входящих подключений:
|
После того, как всё запрещено, вы можете начать назначать политики, разрешающие подключения. Первым делом разрешите любой трафик для уже установленных соединений:
|
Чтобы не нарушить работу приложений, использующих адрес обратной связи, обычно рекомендуется добавить следующее правило:
|
Эти правила разрешают любой входящий и исходящий трафик для сети 127.0.0.0/8 (127.0.0.0 - 127.255.255.255) на интерфейсе обратной связи (lo). При создании правил неплохо было бы, чтобы правила были как можно более точными, дабы не разрешить по недосмотру какой-нибудь злоумышленный трафик. Другими словами, под правилами, разрешающими слишком мало, понимается больше правил и больше набора на клавиатуре.
Следующим делом следовало бы разрешить доступ к определённым службам, работающим на вашей машине. Если, к примеру, вам нужно использовать на своей машине веб-сервер, вам надо использовать примерно такое правило:
|
Это правило разрешит доступ для любой машины на 80-й порт вашей машины через интерфейс ppp0. Вам может понадобиться ограничить доступ к этой службе только для определённых машин. Следующее правило разрешит доступ к вашему веб-серверу только для адреса 64.57.102.34:
|
Разрешение ICMP-трафика может быть полезным для задач диагностирования. Для этого вам следует использовать правило наподобие этого:
|
У большинства людей также есть необходимость настроить на своей шлюзовой машине трансляцию сетевых адресов (Network Address Translation, NAT), чтобы другие машины из локальной сети могли выходить через него в Интернет. Для этого вам нужно использовать следующее правило:
|
Также вам понадобится включить IP-форвардинг. Для временного решения этой задачи вы можете воспользоваться следующей командой:
|
Чтобы включить IP-форвардинг на постоянной основе (т.е. чтобы изменения оставались в силе после перезагрузки), вам понадобится открыть в своём любимом текстовом редакторе файл /etc/rc.d/rc.inet2 и изменить в нём следующую строку:
|
...на следующую:
|
Дополнительную информацию о NAT смотрите в NAT HOWTO.
14.2.2. tcpwrappers
tcpwrappers управляют доступом к демонам на уровне приложений, а не на уровне IP. Это даёт возможность создать дополнительный уровень защиты на тот случай, если управление доступом на уровне IP (Netfilter) работает некорректно. Например, если вы пересобрали ядро, но забыли включить в нём поддержку iptables, ваша защита на уровне IP сведётся на нет. Тогда защитить свою систему вам помогут tcpwrappers.
Управление доступом к службам, защищённым tcpwrappers'ами, осуществляется с помощью файлов /etc/hosts.allow и /etc/hosts.deny.
Основная часть людей использует лишь одну строку в файле /etc/hosts.deny, запрещающую по умолчанию доступ ко всем демонам. Вот эта строка:
|
После этого вы можете заняться предоставлением доступа к службам для определённых хостов, доменов или диапазонов IP-адресов. Это осуществляется с помощью файла /etc/hosts.allow, имеющего такой же формат.
Многие люди начинают с разрешения всех подключений от localhost. Этого можно достичь с помощью следующей строки:
|
Чтобы разрешить доступ к SSHd для сети 192.168.0.0/24, можете использовать следующие правила:
|
Также существует возможность ограничить доступ для хостов из определённых доменов. Это можно выполнить с помощью следующего правила (учтите, что оно основывается на обратной записи в DNS подключающегося хоста, которая не всегда соответствует действительности или может вообще отсутствовать, поэтому я бы не рекомендовал использовать её для хостов из Интернета):
|