Использование утилиты «iptables»
Дополнительный файл:
iptables-persistent_1.00_sterra-1_all.deb
Данный документ описывает особенности использования утилиты iptables в продукте «С-Терра Шлюз», а также кратко поясняет важные моменты подсистемы netfilter ядра Linux.
Утилита «iptables» - это инструмент для настройки фильтрации и трансляции сетевых адресов (NAT – network address translation) применительно к пакетам IPv4. Утилита «iptables» является пользовательским интерфейсом к подсистеме netfilter ядра Linux.
Подсистема netfilter состоит из набора таблиц (filter, nat, mangle, raw, security) и цепочек (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING, также могут использоваться пользовательские цепочки). Таблицы определяют действия над пакетами, а цепочки – место совершения действия относительно пути прохождения пакетов и политику обработки. Каждая таблица состоит из набора цепочек, например, в таблице filter находится три цепочки INPUT, FORWARD, OUTPUT.
В подсистему netfilter также встроен драйвер (обработчик пакетов) ПО «С-Терра Шлюз», а именно – входящие на интерфейс пакеты обрабатываются до цепочки PREROUTING, а исходящие после POSTROUTING. Утилита «iptables» не может напрямую управлять правилами обработки трафика ПО «С-Терра Шлюз», но может повлиять на процесс обработки, поэтому нужно очень внимательно относиться к конфигурированию подсистемы netfilter при помощи iptables.
У каждой цепочки есть политика обработки пакетов. Политика может быть разрешающая (ACCEPT) – разрешено все, что не запрещено, или блокирующая (DROP) – запрещено все, что не разрешено. На С-Терра Шлюз политика по умолчанию – ACCEPT, соответственно, подсистема netfilter разрешает прохождение любого трафика. Посмотреть политику во всех цепочках таблицы filter:
root@gate:~# iptables -L -n -t filter
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- 192.168.1.100 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
1. Filter – применяется для фильтрации пакетов (используется по умолчанию, если в iptables не задан параметр «-t»). Рекомендуется использовать данную таблицу для разрешения/блокировки пакетов. Правило, разрешающее входящие SSH пакеты на хост:
iptables –A INPUT -p tcp --dport 22 -j ACCEPT
2. Nat – применяется для выполнения трансляции адресов (source NAT и destination NAT). При выполнении source NAT нужно указывать цепочку POSTROUTING, а при выполнении destination NAT нужно указывать цепочку PREROUTING:
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 1.1.1.1
iptables -t nat -A PREROUTING --dst 1.1.1.1 -p tcp --dport 2200 -j DNAT --to-destination 192.168.1.100:22
3. Mangle – используется для специализированного изменения пакетов (например, действия TCPMSS, TTL, TOS, MARK). Используйте данную таблицу только в том случае, если Вы отчетливо понимаете то, что делаете. Правило, изменяющее MSS в tcp пакетах:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1400
4. Raw – используется для фильтрации и изменения пакетов до их регистрации в подсистеме отслеживания соединений (connection tracking), также данная таблица используется, если необходимо совершать действия над еще несобранными пакетам (фрагментами). Используйте данную таблицу только в том случае, если Вы отчетливо понимаете то, что делаете. Правила, выключающие отслеживание всех соединений (переключение с stateful в stateless режим):
iptables -t raw -I PREROUTING -j NOTRACK
iptables -t raw -I OUTPUT -j NOTRACK
5. Security – используется подсистемой SELinux. Данная таблица никак не связана с ПО «С-Терра Шлюз» и крайне не рекомендуется для использования.
1. Входящий пакет, предназначенный для локального хоста: [драйвер ПО «С-Терра Шлюз»] -> [PREROUTING] -> [INPUT].
2. Входящий пакет (транзитный), предназначенный для другого хоста: [драйвер ПО «С-Терра Шлюз»] -> [PREROUTING] -> [FORWARD] -> [POSTROUTING] -> [драйвер ПО «С-Терра Шлюз»].
3. Локально сгенерированный пакет: [OUTPUT] -> [POSTROUTING] -> [драйвер ПО «С-Терра Шлюз»].
Драйвер ПО «С-Терра Шлюз» обрабатывает пакеты только на тех интерфейсах, на которых включены функции контроля, например, если на интерфейсе заданы списки доступа или крипто-карты.
Выводы:
1. Входящие ESP/NAT-T пакеты, направляющиеся для расшифрования в подсистему IPsec ПО «С-Терра Шлюз», не могут быть обработаны в подсистеме netfilter (совершать операции при помощи iptables можно только над расшифрованными пакетами).
2. Подсистема netfilter не может разрешить прохождение трафика, который заблокирован в подсистеме Firewall ПО «С-Терра Шлюз», но может его изменить так, чтобы не сработали функции перехвата.
3. Если используется политика DROP для цепочек INPUT/OUTPUT, то необходимо разрешить прием входящих/исходящих пакетов протокола IKE (udp, порты 500/4500) в подсистеме netfilter.
4. Если С-Терра Шлюз используется для предоставления доступа в Интернет и необходимо осуществлять source NAT, то первоначально нужно создать правила, исключающие IKE/NAT-T трафик, а также трафик который должен шифроваться, а потом добавить правило для source NAT. Например, считаем, что С-Терра Шлюз защищает взаимодействие между подсетями 192.168.1.0/24 (локальная подсеть) и 192.168.2.0/24 (удаленная подсеть) и имеет публичный IP-адрес 1.1.1.1 на внешнем интерфейсе eth1, то тогда правила iptables должны выглядеть следующем образом:
iptables -t nat -A POSTROUTING -o eth1 –s 1.1.1.1 -p udp --source-port 500 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 –s 1.1.1.1 -p udp --source-port 4500 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -d 192.168.2.0/24 -j
ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 1.1.1.1
5. Если используется маркирование пакетов (действие MARK), то значение метки не должно превышать 16777215 (оставшиеся значения зарезервированы для внутреннего использования ПО «С-Терра Шлюз»):
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
Если у Вас устройство «С-Терра Шлюз» без SPDS, то до полного выполнения всех шагов инструкции не перезагружайте устройство. Будьте внимательны, инструкция ниже актуальна только для шлюзов класса КС1 и КС2 (см. значение параметров PLATFORM и CLASS в файле /etc/image_version).
Перед применением ПО «iptables» нужно установить deb-пакет «iptables-persistent» (утилита «iptables» предустановлена изначально), который используется для сохранения и очистки всех правил iptables, а также для автоматического применения сохраненных ранее правил после перезагрузки ОС.
1. Получите deb-пакет «iptables-persistent» в личном кабинете Партнера (https://www.s-terra.ru/auth/).
2. Доставьте deb-пакет «iptables-persistent» на С-Терра Шлюз и установите его:
root@gate:~# dpkg -i iptables-persistent_1.00~sterra-1_all.deb
3. В диалоговом окне «Configuring iptables-persistent» (см. рисунок 1). нажмите «Yes» для сохранения существующих правил iptables (правила будут сохранены в файл /etc/iptables/rules.v4).
Рисунок 1. Диалоговое окно «Configuring iptables-persistent»
4. Если у Вас «С-Терра Шлюз» без SPDS, то перед перезагрузкой устройства необходимо осуществить пересчёт хэш-сумм:
root@GW1:~# /opt/VPNagent/bin/links_verify.sh update
1. Добавление. Добавление правил осуществляется стандартным способом – через bash cli, например:
root@gate:~# iptables -A FORWARD -s 192.168.1.100 -j DROP
2. Удаление. Удаление правил по одному осуществляется через bash cli, например, добавление и удаление правила:
root@gate:~# iptables -A FORWARD -s 192.168.1.100 -j DROP
root@gate:~# iptables -D FORWARD -s 192.168.1.100 -j DROP
Если необходимо удалить все правила iptables, то выполните команду service iptables-persistent flush (данная команда также очищает файл /etc/iptables/rules.v4, соответственно, после перезагрузки правил не будет):ё
root@gate:~# service iptables-persistent flush
[ ok ] Flushing rules... IPv4...done.
3. Сохранение. Сохранение правил осуществляется при помощи команды service iptables-persistent save (правила будут сохранены в файл /etc/iptables/rules.v4 и автоматически загружены из него после перезагрузки ОС):
root@gate:~# service iptables-persistent save
[ ok ] Saving rules... IPv4...done.
4. Просмотр. Просмотр текущих правил осуществляется через bash cli, например, чтобы посмотреть содержимое таблиц filter, mangle и nat выполните следующие команды:
root@gate:~# iptables -L -n -v -t filter
Chain INPUT (policy ACCEPT 252 packets, 30120 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 192.168.1.100 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 220 packets, 24744 bytes)
pkts bytes target prot opt in out source destination
root@gate:~# iptables -L -n -v -t mangle
Chain PREROUTING (policy ACCEPT 112 packets, 11130 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 106 packets, 10662 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcpflags: 0x06/0x02 TCPMSS set 1400
Chain OUTPUT (policy ACCEPT 31 packets, 4296 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 31 packets, 4296 bytes)
pkts bytes target prot opt in out source destination
root@gate:~# iptables -L -n -v -t nat
Chain PREROUTING (policy ACCEPT 59 packets, 13001 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 53 packets, 12533 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1 packets, 76 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 1 packets, 76 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * eth1 192.168.1.0/24 192.168.2.0/24
0 0 SNAT all -- * eth1 192.168.1.0/24 0.0.0.0/0 to:1.1.1.1