В начало → Сетевые сервисы → Настройка iptables для начинающих |
В сети мало документации по iptables рассчитанной на новичков. Мы же попытаемся восполнить этот пробел. Рассмотрим основы составления правил, а также некоторые дополнительные модули которые помогут сделать жизнь легче.
Прежде чем двигаться дальше — убедитесь, что ...
Всё ваше аппаратное обеспечение работоспособно. То есть Вы подключили все оборудование, модули грузятся, устройства видны в системе. Полезно в начале проверить, что соединение с интернетом возможно и без всяких там iptables. Нет ничего хуже, чем в течении многих часов возиться с упрямой программой, ругая её почём зря, а потом понять, что сетевая карта не работает или модем сконфигурирован неправильно.
Вы имеете представление о сетевых технологиях и Вы знакомы с администрированием Linux и Gentoo Linux в частности. То есть необходимы навыки работы с такими базовыми вещами как ifconfig, rc-update, /etc/conf.d/net, и так далее. Если для Вас это пока пустые звуки, то, пожалуйста предварительно изучите Настольную книгу Gentoo и Linux Help's Networking Basics 101
Все что вам нужно — это включить поддержку iptables.
Networking --->
Networking Options---->
Network Packet Filtering (replace Ipchains)--->
Netfilter Configuration
Включим все опции как модули (хотя с точки зрения безопасности модули следует вообще отключить, монолитное ядро надежнее, хотя и медленнее).
Далее вы должны установить пакет iptables: emerge iptables
Предположим, что у нас есть 2 сетевых интерфейса: eth0 — локальная сеть и ppp0 — интернет соединение.
Проверим работоспособность сети командой ping:
Code: ping |
ping www.google.com ping 192.168.1.78 ping 192.168.2.77 |
Запустим iptables: /etc/init.d/iptables start
Эта команда загрузит основные модули и создаст цепочки в ядре Linux. Теперь добавим iptables в автозагрузку: rc-update add iptables default
Скрипт /etc/init.d/iptables понимает несколько команд (/etc/init.d/iptables <команда>), некоторые из них:
start — запуск iptables. Восстанавливает все правила (правила хранятся в /var/lib/iptables/rules-save);
stop — сброс всех цепочек;
save — сохранение всех правил.
Практически все правила можно привести к виду: iptables -A ЦЕПОЧКА ПАРАМЕТРЫ_ПАКЕТА -j ДЕЙСТВИЕ
Цепочки
Все изменения будем проводить над таблицей filter, именно она отвечает за фильтрацию пакетов. В таблице filter существует 3 цепочки: INPUT, OUTPUT и FORWARD. В каждой цепочки свой "тип" пакетов:
INPUT — пакеты пришедшие к Вам. То есть входящий трафик.
FORWARD — пакеты которые предназначены для другого узла, то есть транзитный трафик.
OUTPUT — пакеты, которые уходят от нас, или исходящий трафик.
Работают с цепочками так: iptables <опция> <цепочка>
Для работы с цепочками предусмотрены следующие опции:
-A — добавление нового правила в цепочку. Правило будет добавлено в конец цепочки.
-I — добавление правила не в конец,а туда куда вы укажите. Например команда:
iptables -I INPUT 2 bla-bla-bla — сделает наше правило вторым.
-D — удаление правила. Например для удаления пятого правила введите:
iptables -D INPUT 5
-F — сброс всех правил цепочки. Нужно, например,при удалении ненужной цепочки.
-N — создание пользовательской цепочки. Если не хотите создавать кашу в каждой цепочке, то создайте несколько дополнительных цепочек. Синтаксис такой: iptables -N ЦЕПОЧКА. Только русские буквы, конечно, использовать нельзя.
-X — удаление пользовательской цепочки.
ПРИМЕЧАНИЕ: Удалить цепочки INPUT, OUTPUT и FORWARD нельзя.
-P — установка политики для цепочки. Например:
iptables -P ЦЕПОЧКА ПОЛИТИКА
Итак по каким параметрам можно фильтровать пакеты? Рассмотрим самые основные.
Источник пакета
Для фильтрации по источнику используется опция -s. Например запретим все входящие пакеты с узла 192.168.133.133: iptables -A INPUT -s 192.168.133.133 -j DROP
Можно использовать доменное имя для указания адреса хоста. То есть: iptables -A INPUT -s test.host.jp -j DROP
Также можно указать целую подсеть: iptables -A INPUT -s 192.168.133.0/24 -j DROP
Также вы можете использовать отрицание (знак !). Например так — все пакеты с хостов отличных от 192.168.133.156 будут уничтожаться: iptables -A INPUT -s ! 192.168.133.156 -j DROP
Адрес назначения
Для этого нужно использовать опцию -d. Например запретим все исходящие пакеты на хост 192.168.156.156: iptables -A OUTPUT -d 192.168.156.156 -j DROP
Как и в случае с источником пакета можно использовать адреса подсети и доменные имена. Отрицание также работает.
Протокол
Опция -p указывает на протокол. Можно использовать all, icmp, tcp, udp.
Порт источника
Указывает на порт с которого был прислан пакет. Вот синтаксис: iptables -A INPUT -p tcp --sport 80 -j ACCEPT
Для указания порта необходимо указать протокол (tcp или udp). Можно использовать отрицание.
Порт назначения
Порт назначения. Синтаксис: iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Как и в случае с портом источника нужно указать протокол. Можно использовать отрицание.
Проку от того,что мы укажем параметры пакета нет.Нужно указать,что надо с ним делать. Для этого служит опция -j. Рассмотрим основные действия:
ACCEPT — разрешить пакет.
DROP — уничтожить пакет.
REJECT — будет отправлено ICMP сообщение, что порт недоступен.
LOG — информация об этом пакете будет добавлена в системный журнал (syslog).
В качестве действия можно указать и имя пользовательской цепочки. Например перекинем все пакеты с локальной сети в цепочку, где будет производиться дополнительная проверка: iptables -A INPUT -s 192.168.200.0/24 -j LOCAL_NET
В больши�стве случаев пользователю достаточно выполнить такую последовательность комманд: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -P INPUT DROP
Вот собственно и вся настройка. На первый взгляд непонятно, что мы тут вообще сделали. Поэтому ознакомимся с основами составления правил.
Может сложиться впечатление, что возможностей у iptables маловато. Однако с использованием модулей iptables получит просто безграничные возможности. Для указания модуля используется опция -m. Например: iptables -A INPUT -m модуль bla-bla
-m owner
Добавляет следующие опции (опции только для цепочки OUTPUT):
--uid-owner UID — UID программы пославшей пакет.
--gid-owner GID — GID прораммы пославшей пакет.
Следующие опции доступны только в версиях ядра ниже 2.6.14:
--pid-owner PID — PID программы пославшей пакет.
--sid-owner SID — SID (идентификатор сессии) производится проверка SID пакета, значение SID наследуются дочерними процессами от "родителя".
--cmd-owner NAME — имя программы пославшей пакет.
-m multiport
Позволяет указывать не по одному порту, а сразу несколько:
--source-ports порт1,порт2 — список портов, с которых пришел пакет;
--sports порт1,порт2 — укороченый аналог --source-ports;
--destination-ports порт1,порт2 — список портов назначения;
--dports порт1,порт2 — укороченый аналог --destination-ports;
--ports порт1,порт2 — проверяет как исходящий так и входящий порт пакета.
-m state
Предназначен для указания состояния пакета с помощью опции --state. Доступны следующие типы пакетов:
NEW — пакет устанавливающий новое соединение.
ESTABLISHED — пакет от уже установленного соединения.
RELATED — новый пакет уже установленном соединении.
-m mac
Проверяет соответствие MAC-адреса в пакете с помощью опции --mac-source, например:
iptables -A INPUT -s 192.168.0.1 -m mac --mac-source 00:65:3F:ED:12:98 -j DROP
Получено с http://ru.gentoo-wiki.com/Настройка_iptables_для_начинающих
В начало → Сетевые сервисы → Настройка iptables для начинающих |