Файл настройки фаирвола iptables лежит по пути /etc/sysconfig/iptables (справедливо для RedHat/CentOS).
Если необходимо, чтобы iptables при каждом запуске компьютера конфигурировался из данного конфига, и этот конфиг оставался таким, каким его настроил администратор (т. е. чтобы конфиг не менялся при выключении компьютера), необходимо прописать в файл /etc/sysconfig/iptables-config параметры:
IPTABLES_SAVE_ON_STOP="no"
IPTABLES_SAVE_ON_RESTART="no"
Пример конфиг-файла iptables
Для начала надо привести пример небольшого конфига для фаирвола iptables:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
Здесь видна общая структура. Далее идет описание секций этого конфига и правила, по которым определяются границы секций.
Таблицы
Описание таблицы начинается с символа звёздочка "*", после чего идет имя таблицы в нижнем регистре. Область таблицы тянется до следующего заголовка таблицы. Фаирвол iptables работает с четырьмя типами таблиц:
- mangle - обычно эта таблица используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр.
- nat - эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях.
- filter - здесь производится фильтрация трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.
- raw - пакет проходит данную таблицу до передачи системе определения состояний. Используется редко, например для маркировки пакетов, которые НЕ должны обрабатываться системой определения состояний. Для этого в правиле указывается действие NOTRACK. Содержитcя в цепочках PREROUTING и OUTPUT.
Чаще всего настраивают таблицу filter.
Цепочки
После заголовка таблицы перечисляются цепочки траффика. Описание цепочки занимает одну строку, строка должна начинаться с двоеточия ":". Для таблицы filter доступны к использованию следующие системные цепочки:
- INPUT – цепочка входящих пакетов, адресованных непосредственно данному компьютеру;
- OUTPUT – цепочка исходящих пакетов, создаваемых на компьютере;
- FORWARD - цепочка проходящих через данную машину пакетов;
- PREROUTING — для изначальной обработки входящих пакетов;
- POSTROUTING— для окончательной обработки исходящих пакетов;
Так же возможно описание пользовательских цепочек. Например:
RH-Firewall-1-INPUT - определяемая пользователем цепочка. Чтобы через пользовательскую цепочку начал проходить траффик, его нужно перенаправить из стандартной системной цепочки, о чем будет написано ниже. В одну пользовательскую цепочку можно направить несколько системных цепочек, например в цепочку RH-Firewall-1-INPUT можно направить INPUT и FORWARD.
Формат строки с описанием цепочки следующий:
:имя_цепочки политика_доступа_по_умолчанию [счетчик_пакетов:счетчик_байт]
где
- имя_цепочки - это название цепочки (INPUT / OUTPUT / FORWARD или пользовательское имя);
- политика_доступа_по_умолчанию - политика доступа (ACCEPT, DROP, REJECT);
- счетчик_пакетов - начальное значение счетчика пакетов, прошедших через цепочку;
- счетчик_байт - начальное значение счетчика байт, прошедших через цепочку.
Политика доступа может принимать значения:
- ACCEPT – пакет пропускается;
- DROP – пакет молча отклоняется;
- REJECT – отклонение пакета с уведомлением отправителю;
- Прочерк "-" - что означает неясно, нужно разбираться.
Политика доступа по-умолчанию применяется в том случае, если небыло найдено ни одного правила для соответствующего пакета.
Наборы правил
После перечисления цепочек внутри таблицы, размещается область перечисления правил. Набор правил выглядит вот так:
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
...
по сути, это опции консольной утилиты iptables. Команды и параметры приведены ниже:
Параметр |
Описание |
Пример |
Команды |
--append (-A) |
Добавить в указанную цепочку и указанную таблицу заданное правило в КОНЕЦ списка. |
iptables -A FORWARD критерии -j действие |
--delete (-D) |
Удаляет заданное номером(ами) или правилом(ами) правило(а). Первый пример удаляет все правила с номерами 10,12 во всех цепочках, в таблицах filter, второй пример удаляет заданное правило из таблицы mangle в цепочке PREROUTING. |
iptables -D 10,12 iptables -t mangle -D PREROUTING критерии -j действие |
--rename-chain (-E) |
Изменить имя цепочки. |
iptables -E OLD_CHAIN NEW_CHAIN |
--flush (-F) |
Очистка всех правил текущей таблицы. Ко всем пакетам, которые относятся к уже установленным соединениям, применяем терминальное действие ACCEPT — пропустить |
iptables -F |
--insert (-I) |
Вставляет заданное правило в место, заданное номером. |
iptables -I FORWARD 5 критерии -j действие |
--list (сокр. -L) |
Просмотр существующих правил (без явного указания таблицы - отображается таблица filter всех цепочек). |
iptables -L |
--policy (-P) |
Устанавливает стандартную политику для заданной цепочки. |
iptables -t mangle -P PREROUTING DROP |
--replace (-R) |
Заменяет заданное номером правило на заданное в критериях. |
iptables -R POSROUTING 7 | критерии -j действие |
--delete-chain (-X) |
Удалить ВСЕ созданные вручную цепочки (оставить только стандартные INPUT, OUTPUT, FORWARD, PREROUTING и POSTROUTING). |
iptables -X |
--zero (-Z) |
Обнуляет счетчики переданных данных в цепочке. |
iptables -Z INPUT |
Параметры |
--numeric (-n) |
Не резолвит адреса и протоколы при выводе. |
|
--line-numbers |
Указывать номера правил при выводе (может использоваться совместно с -L). |
iptables -L --line-numbers |
--help (-h) |
помощь по утилите, куда же без нее |
|
-t таблица |
Задает название таблицы, над которой необходимо совершить действие. В примере сбрасывается таблица nat во всех цепочках. |
iptables -t nat -F |
--verbose (-v) |
Детальный вывод. |
iptables -L -v |
Правила бывают как минимум двух видов:
1. Правила связывания цепочек. Выглядят такие правила так:
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
Правила связывания содержат имя двух цепочек и не содержат наименования действия.
2. Правила с условием и действием. Примеры таких правил:
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
Такие правила содержат имя цепочки, условие и наименование действия в конце команды. Действие предваряется ключем -j (что обозначает jump, т. е. переход к действию такому то)
Комментарии
Строки с текстовыми комментариями должны начинаться с символа решетки "#".