Рейтинг:1

iptables PREROUTING не действует

флаг ru
Cal

Мы используем Ubuntu 20.04 в AWS. Мы пытаемся настроить правило iptables, чтобы любой трафик MySQL с фиктивным IP-адресом перенаправлялся в базу данных MySql по адресу 172.31.6.173 в том же VPC. Позволь мне объяснить:

IP-адреса в этой задаче:

Сервер Ubuntu (источник): 172.31.0.151

Сервер MySql (назначение): 172.31.6.173

Фиктивный IP-адрес MySql: 6.6.6.6

С 172.31.0.151 (источник) мы подключимся к mysql по фиктивному IP-адресу (6.6.6.6), и он будет NAT к месту назначения (172.31.6.173).

Правила, которые мы использовали:

sudo iptables -t nat -A PREROUTING -s 172.31.0.151 -d 6.6.6.6 -j DNAT --к месту назначения 172.31.6.173
sudo iptables -A FORWARD -p TCP -d 172.31.6.173 -j ПРИНЯТЬ

В первой строке указывается, что любой трафик с адреса 172.31.0.151 с пунктом назначения 6.6.6.6 будет перенаправлен на 172.31.6.173.

Вторая строка принимает все tcp вперед на 172.31.6.173.

Это единственные правила в iptables, если я запускаю sudo iptables -t nat -L, результат:

Цепь PREROUTING (политика ПРИНЯТЬ)
целевая защита выбор источника назначения
DNAT все -- 172.31.0.151 6.6.6.6 до:172.31.6.173

Сеть INPUT (политика ACCEPT)
целевая защита выбор источника назначения

Цепочка OUTPUT (политика ACCEPT)
целевая защита выбор источника назначения

Сеть POSTROUTING (правило ACCEPT)
целевая защита выбор источника назначения

Однако с этими двумя правилами с исходного (172.31.0.151) сервера, когда я пытался войти в MySql по фиктивному IP-адресу:

mysql -h 6.6.6.6 -u имя пользователя -p

Вывод tcpdump: (сервер MySql является экземпляром RDS, что означает, что я не могу войти в систему для запуска tcpdump, поэтому я могу получить tcpdump только с исходного сервера):

13:41:41.768171 IP 172.31.0.151.50374 > 6.6.6.6.mysql: флаги [S], seq 3441229166, выигрыш 62727, опции [mss 8961, sackOK, TS val 2723434614 ecr 0,nop,wscale 7], длина 0

13:41:45.992114 IP 172.31.0.151.50374 > 6.6.6.6.mysql: Флаги [S], seq 3441229166, выигрыш 62727, опции [mss 8961, sackOK, TS val 2723438838 ecr 0,nop,wscale 7], длина 0

13:41:54.184186 IP 172.31.0.151.50374 > 6.6.6.6.mysql: Флаги [S], seq 3441229166, выигрыш 62727, опции [mss 8961, sackOK, TS val 2723447030 ecr 0,nop,wscale 7], длина 0

Правило PREROUTING не вступает в силу, попытка входа в систему по-прежнему ищет сервер с адресом 6.6.6.6, вместо того, чтобы выполнить NAT на фактический IP-адрес 172.31.6.173.

Любые советы будут оценены. Спасибо.

Рейтинг:1
флаг cl
A.B

Я предполагаю, что правило OP было добавлено в систему Ubuntu с IP-адресом 172.31.0.151, той же системой, которая затем инициирует соединения mysql с фиктивным адресом.

Как видно в этом Netfilter и общая сеть схема: Поток пакетов в Netfilter и General Networking

  • первый пакет в потоке, инициированном локальным процессом, не проходит nat/PREROUTING,
  • но он пересекает nat/OUTPUT,
  • только первый пакет (состояние NEW) соединения проходит через нат table (поэтому дальнейшие пакеты, такие как ответы, здесь все равно не имеют значения).

Таким образом, nat/PREROUTING не влияет на перенаправление локально инициированного соединения. Это должно быть сделано в nat/OUTPUT. Поскольку это может изменить даже используемый интерфейс (вероятно, не в случае с OP), это вызывает перенаправить чек позже для обработки такого случая.

В конце ваше правило должно быть дополнено:

sudo iptables -t nat -A ВЫВОД -s 172.31.0.151 -d 6.6.6.6 -j DNAT --назначение 172.31.6.173

Если в системе только один IP-адрес: 172.31.0.151, -с 172.31.0.151 становится лишним:

sudo iptables -t nat -A ВЫВОД -d 6.6.6.6 -j DNAT --к месту назначения 172.31.6.173

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.