iptables - это программа настройки фильтрации пакетов для
Linux версий 2.4 и выше. Ядро 2.4 (если быть точнее, 2.4.5) впервые было представлено (в
виде опции) в Slackware версии 8.0, а используемым по умолчанию было сделано в Slackware
8.1. В этом разделе раскрываются только основы использования этой программы, более полную
информацию вы можете получить на сайте https://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 и изменить в нём следующую строку:
...на следующую:
Дополнительную информацию о NAT смотрите в NAT
HOWTO.
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, можете
использовать следующие правила:
sshd : 192.168.0.0/24
sshd : 192.168.0.
|
Также существует возможность ограничить доступ для хостов из определённых доменов. Это
можно выполнить с помощью следующего правила (учтите, что оно основывается на обратной
записи в DNS подключающегося хоста, которая не всегда соответствует действительности или
может вообще отсутствовать, поэтому я бы не рекомендовал использовать её для хостов из
Интернета):