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 во всех цепочках для входящих подключений:
# iptables -P INPUT DROP # iptables -P FORWARD DROP |
После того, как всё запрещено, вы можете начать назначать политики, разрешающие подключения. Первым делом разрешите любой трафик для уже установленных соединений:
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT |
Чтобы не нарушить работу приложений, использующих адрес обратной связи, обычно рекомендуется добавить следующее правило:
# iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT |
Эти правила разрешают любой входящий и исходящий трафик для сети 127.0.0.0/8 (127.0.0.0 - 127.255.255.255) на интерфейсе обратной связи (lo). При создании правил неплохо было бы, чтобы правила были как можно более точными, дабы не разрешить по недосмотру какой-нибудь злоумышленный трафик. Другими словами, под правилами, разрешающими слишком мало, понимается больше правил и больше набора на клавиатуре.
Следующим делом следовало бы разрешить доступ к определённым службам, работающим на вашей машине. Если, к примеру, вам нужно использовать на своей машине веб-сервер, вам надо использовать примерно такое правило:
# iptables -A INPUT -p tcp --dport 80 -i ppp0 -j ACCEPT |
Это правило разрешит доступ для любой машины на 80-й порт вашей машины через интерфейс ppp0. Вам может понадобиться ограничить доступ к этой службе только для определённых машин. Следующее правило разрешит доступ к вашему веб-серверу только для адреса 64.57.102.34:
# iptables -A INPUT -p tcp -s 64.57.102.34 --dport 80 -i ppp0 -j ACCEPT |
Разрешение ICMP-трафика может быть полезным для задач диагностирования. Для этого вам следует использовать правило наподобие этого:
# iptables -A INPUT -p icmp -j ACCEPT |
У большинства людей также есть необходимость настроить на своей шлюзовой машине трансляцию сетевых адресов (Network Address Translation, NAT), чтобы другие машины из локальной сети могли выходить через него в Интернет. Для этого вам нужно использовать следующее правило:
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE |
Также вам понадобится включить IP-форвардинг. Для временного решения этой задачи вы можете воспользоваться следующей командой:
# echo 1 > /proc/sys/net/ipv4/ip_forward |
Чтобы включить IP-форвардинг на постоянной основе (т.е. чтобы изменения оставались в силе после перезагрузки), вам понадобится открыть в своём любимом текстовом редакторе файл /etc/rc.d/rc.inet2 и изменить в нём следующую строку:
IPV4_FORWARD=0 |
...на следующую:
IPV4_FORWARD=1 |
Дополнительную информацию о NAT смотрите в NAT HOWTO.
14.2.2. tcpwrappers
tcpwrappers управляют доступом к демонам на уровне приложений, а не на уровне IP. Это даёт возможность создать дополнительный уровень защиты на тот случай, если управление доступом на уровне IP (Netfilter) работает некорректно. Например, если вы пересобрали ядро, но забыли включить в нём поддержку iptables, ваша защита на уровне IP сведётся на нет. Тогда защитить свою систему вам помогут tcpwrappers.
Управление доступом к службам, защищённым tcpwrappers'ами, осуществляется с помощью файлов /etc/hosts.allow и /etc/hosts.deny.
Основная часть людей использует лишь одну строку в файле /etc/hosts.deny, запрещающую по умолчанию доступ ко всем демонам. Вот эта строка:
ALL : ALL |
После этого вы можете заняться предоставлением доступа к службам для определённых хостов, доменов или диапазонов IP-адресов. Это осуществляется с помощью файла /etc/hosts.allow, имеющего такой же формат.
Многие люди начинают с разрешения всех подключений от localhost. Этого можно достичь с помощью следующей строки:
ALL : 127.0.0.1 |
Чтобы разрешить доступ к SSHd для сети 192.168.0.0/24, можете использовать следующие правила:
sshd : 192.168.0.0/24 sshd : 192.168.0. |
Также существует возможность ограничить доступ для хостов из определённых доменов. Это можно выполнить с помощью следующего правила (учтите, что оно основывается на обратной записи в DNS подключающегося хоста, которая не всегда соответствует действительности или может вообще отсутствовать, поэтому я бы не рекомендовал использовать её для хостов из Интернета):
sshd : .slackware.com |