Как перенаправить установленные соединения с помощью iptables?

Как перенаправить установленные соединения с помощью iptables?

Я пытаюсь создать правила iptables для перенаправления всего трафика, предназначенного для порта 1986, на порт 9, чтобы спровоцировать «отказ в подключении», используя следующее правило:

iptables -t nat -I PREROUTING -p tcp -m tcp --dport 1986 -j DNAT --to-destination :9

Это отлично работает для новых подключений, но проблема в том, что установленные подключения, похоже, обходят это правило и не отклоняются.

Я попробовал добавить NOTRACKправило в таблицу raw, чтобы попытаться избежать отслеживания состояния соединения, но это не дало никакого эффекта:


iptables -t raw -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j NOTRACK

Добавление состояния в правило nat также не работает:

iptables -t nat -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j DNAT --to-destination :9

Как использовать iptables для вызова ошибки «соединение отклонено» для пакетов, отправленных по установленным соединениям?

решение1

Правило DNATсоздает запись в таблице conntrack, когда соединение устанавливается с помощью трехстороннего TCP-рукопожатия.

Правило notrack, похоже, отключает создание новых записей conntrack. Однако оно не мешает использовать существующие записи conntrack.

Поскольку соединение уже установлено, в таблице conntrack уже есть запись, и ядро ​​использует ее для пересылки трафика.

Вам следует использовать conntrackинструмент для удаления потоков из таблицы conntrack. Например:

conntrack -D -s 192.168.1.10 -d 192.168.100.20 -p tcp --dport 1986

После выполнения этой команды соединение повторно добавляется в conntrack с использованием новых правил DNAT в iptables. Затем новый сервер назначения отклонит соединение. Я не уверен, что именно новый сервер назначения отправит обратно, возможно, TCP RST.

Связанный контент