Назад | Перейти на главную страницу

iptables фильтрует перед DNAT, чтобы действовать как брандмауэр

Я пытаюсь использовать iptables в одной системе, чтобы действовать как брандмауэр для фильтрации пакетов и передачи действительных пакетов на серверы за этим брандмауэром, но если я использую DNAT, данные будут передаваться на серверы напрямую, а не фильтроваться.

Что мне делать для этого?

Посмотри на диаграмма на этой странице. Он показывает, как правила NAT предшествуют правилам FORWARD. Даже если вы используете DNAT для какого-либо хоста за брандмауэром, пакет все равно проходит через правила FORWARD (и POSTROUTING) перед фактической отправкой на хост.

Вы можете выполнить фильтрацию в правилах FORWARD. Также полезно при отладке ваших правил вставить что-то вроде этого FORWARD, который будет регистрироваться в системном журнале:

iptables -I FORWARD 1 -j LOG --log-prefix="FWD: "

Это создаст много записей в системном журнале, но даст вам некоторое представление о том, какой трафик передается. Как только вы все настроите, просто удалите правило.

Даже DNAT-пакеты проходят через фильтр. Обрабатывается в порядке

NAT-PREROUTING (e.g. DNAT) => FORWARD => NAT-POSTROUTING (e.g. SNAT, MASQUERADE)

Если это не работает для вас, скорее всего, это потому, что у вас есть правила пересылки, основанные на заголовках, действительных до DNAT. Как только DNAT завершен для обработки пересылки, он обрабатывается с уже измененным адресатом.

Если вы предоставите более подробную информацию о правилах и информации о том, какой трафик «не фильтруется», кто-нибудь может попытаться проверить ваш случай ... Вы предоставили слишком много информации, чтобы быть более конкретным.