LINUX.ORG.RU

Проброс портов на другой IP

 , , , ,


0

2

Добрый вечер всем. Хотел бы узнать как реализовать проброс любого порта на другой ip?

Делаю так

iptables -t nat -A PREROUTING -d 95.47.113.9 -p tcp --dport 89 -j DNAT --to-destination 5.231.67.1:80
iptables -t nat -A POSTROUTING -d 5.231.67.1 -p tcp --dport 80 -j SNAT --to-source 95.47.113.9

Когда я перехожу по адресу 95.47.113.9 отображается сайт по адресу 5.231.67.1 так и должно быть, но на адресе 5.231.67.1 в логах веб сервера пишется не мой ip с которого я захожу (например 195.199.199.199) а как бы зашли с 95.47.113.9. Нужно сделать чтобы исходный мой ip передавался 5.231.67.1. Что бы при переходе на 95.47.113.9 на сервере 5.231.67.1 фиксировался мой 195.199.199.199.

Использоваться будет внешний VPS c 1 ip адрессом для доступа на 5.231.67.1 (оба ip внешние).

Я реализовал такое на Zentyal в нутри сети. Но так как там все в 2 клика, мне нужно узнать на практике правила.

Вся эта затея для того чтобы защитить 5.231.67.1 от udp ddos flood а то атака в 10 гигабит в мои планы не вписывалась. А так я скрою свой реальный ip от досеров и VPS будет выступать для фильтрации трафика.



Последнее исправление: beastie (всего исправлений: 1)

наверное, это будет правильнее решить с помощью haproxy/nginx, ну или что там еще умеет проксировать http(s)

ii343hbka ★★★
()
Последнее исправление: ii343hbka (всего исправлений: 1)
Ответ на: комментарий от ii343hbka

Мне не только http(s) нужно защитить. Вот только что протестировал защиту и VPS справляется, вредоносный трафик ЮДП не пускает, я могу заблокировать входящий ip и он не доходит до второго сервера. Но как я уже писал выше: *Когда я перехожу по адресу 95.47.113.9 отображается сайт по адресу 5.231.67.1 так и должно быть, но на адресе 5.231.67.1 в логах веб сервера пишется не мой ip с которого я захожу (например 195.199.199.199) а как бы зашли с 95.47.113.9. Нужно сделать чтобы исходный мой ip передавался 5.231.67.1. Что бы при переходе на 95.47.113.9 на сервере 5.231.67.1 фиксировался мой 195.199.199.199.*

GHBB
() автор топика
Ответ на: комментарий от GHBB

ну так правильно
iptables же не ставит x-forwarded-for поле в http-заголовке, ты ж натишь
подними на vps nginx/haproxy, опиши upstream/backend с адресом второго сервера с вебчиком. Как сохранять заголовки я уже не помню, но это просто(в первой десятке линков с гугла)
и будет та же логика, что ты хочешь, но другим инструментом реализованная

ii343hbka ★★★
()
Ответ на: комментарий от GHBB

помоему это не реально, противоречит маршрутизации

 iptables -t nat -A POSTROUTING -d 5.231.67.1 -p tcp --dport 80 -j SNAT --to-source 95.47.113.9

особенно эта строка

pavel38
()
Последнее исправление: pavel38 (всего исправлений: 1)
Ответ на: комментарий от pavel38

На Zentyal в нутри сети же работает, nat может передавать source ip но правило я не знаю. Смотрел правила в Zentyal так ничего и не понял...

GHBB
() автор топика
Ответ на: комментарий от GHBB

Какое правило в Zentyal DNAT tcp  — anywhere vz95-47-113-99.1gb.ua tcp dpt:http to:5.231.67.1:80

Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT tcp  — anywhere 5.231.67.1 tcp dpt:http to:95.47.113.99

GHBB
() автор топика
Ответ на: комментарий от GHBB

Попробуй поднять туннель между 95.47.x.x и 5.231.x.x, и уже по туннелю гоняй нужный тебе трафик с помощью DNAT.

На Zentyal в нутри сети же работает, nat может передавать source ip но правило я не знаю. Смотрел правила в Zentyal так ничего и не понял...

NAT не может передавать source ip. Для адреса источника в пакете всего одно поле, и оно перезаписывается правилом SNAT. Хочешь объяснения, как оно работало, - давай полную схему сети с твоей внутренней сеткой, зентялом, двумя хостами (95.47.x.x и 5.231.x.x) и всеми существующими между ними линками и туннелями.

anonymous
()
Ответ на: комментарий от GHBB

Хотя уже понятно, как оно работало. Ты меняешь адрес назначения на своем шлюзе, поэтому трафик сразу идет к 5.231.x.x, минуя 95.47.x.x. Но весь остальной интернет ходит через 95.47.x.x, поэтому вот так и получается.

anonymous
()
Ответ на: комментарий от anonymous

А на Zentyal работало все так: Внешний ip был 95.47.x.x внутренний 5.231.x.x. Я на 95.47.x.x в панели создавал правило, интерфейс eth0, назначение 5.231.x.x, убрал галочку (заменить адрес источника) и вуаля, когда кто то конектился на 95.47.x.x то 5.231.x.x получал адрес источника.

GHBB
() автор топика
Ответ на: комментарий от GHBB

Внешний ip был 95.47.x.x внутренний 5.231.x.x.

Что ты подразумеваешь под внешним и внутренним ip?

Я на 95.47.x.x в панели создавал правило...

Это на зентяле? VPS для фильтрации трафика и зентял - это две разных машины?

когда кто то конектился на 95.47.x.x то 5.231.x.x получал адрес источника.

И этот адрес источника был внешним адресом зентяла?

anonymous
()

Не совсем по теме вопрос.

Атака в 10Gb/s постоянная? только udp пакеты? А если атакующий изменит логику атаки? В общем, интересует, как настроена машина фаерволл.

Как вариант - на второй машине маунтить /var/log с первой машины. В смысле расшарить /var/log. Или принципиально отсутствие логов на первой машине?

noiseme
()
Ответ на: комментарий от anonymous

Первое, на тесте, у меня 1 внешний ip и за зантиалом сеть с внутренних ip.
Второе ip зентиала 95.47.x.x я создавал правило проброса на внутренний ip.
Третье адрес источника был ip который заходил на 95.47.x.x

Ну например так, ip пользователя 1.1.1.1 --- ip Zentyal 2.2.2.2 --- ip server 3.3.3.3. Пользователь 1.1.1.1 запрашивает 2.2.2.2 (на нем проброс 80 порта) эму откликается 3.3.3.3. Но 3.3.3.3 видит что запрос идет от 1.1.1.1 (от пользователя)

GHBB
() автор топика
Ответ на: комментарий от noiseme

У меня провайдер идиот и у него сеть настроена так что если кому то с сети ддос то вся сеть ложиться.

GHBB
() автор топика
Ответ на: комментарий от GHBB

У тебя между зентялом и впс туннель, что ли? Впрочем, ладно, просто считай, что с остальным интернетом так не получится :) .

В общем, поднимай между твоими хостами туннель (или используй существующий), и пускай трафик через него.

anonymous
()
Ответ на: комментарий от anonymous

Я вот думаю, а можно ли как то поднять vpn, для таких целей? Чтобы работало так как я написал все?

GHBB
() автор топика
Ответ на: комментарий от anonymous

Я Вас не понял немного, ну вот я подыму туннель или ВПН я смогу передать ip конечному серверу по моей задумке?

GHBB
() автор топика
Ответ на: комментарий от GHBB
----------      -----------        -------------
| a.b.c.d|      |95.47.x.x|        | 5.231.x.x |
| Клиент |------|   VPS   |--------|  Server   |
|        |      |10.0.0.1 |        | 10.0.0.2  |
----------      -----------        -------------
          <---->           <------>
           Инет             Туннель

Адреса 10.0.0.1 и 10.0.0.2 используются внутри туннеля, взяты для примера.

На VPS делаем DNAT необходимого трафика на внутритуннельный адрес сервера, т.е. -j DNAT --to-destination 10.0.0.2. На сервере делаем дефолтный маршрут через 10.0.0.1, при этом не забываем добавить маршрут до 95.47.x.x через дефолтный шлюз, полученный от хостинга.

anonymous
()
Ответ на: комментарий от GHBB

Не SNAT, он не нужен, а DNAT. И DNAT не обязательно в связке с openvpn, можно и просто тунель без шифрации, допустим ipip или gre.

Чтобы распутаться, читайте доки. Представьте ip-пакет, идущий от клиента к серверу и подумайте что с ним происходит при прохождении через *NAT-правила. И что происходит с ответным пакетом от сервера к клиенту.

mky ★★★★★
()

не вчитывался, но ssh не подойдет ? что-то вроде

ssh -fNnT -R "*:VPS_PORT:localhost:LOCAL_PORT" VPS_IP 

Dred ★★★★★
()
Ответ на: комментарий от Dred

Я нашёл маны по Zentyal - Zentyal OpenVPN. Что можно между ними создать виртуальную сеть и гонять трафик как и в нутри сети. У меня 4 сервера обслуживаются 1 шлюзом на котором Zentyal. Он гоняет весь трафик 4 серверам. Теперь хочу сделать Zentyal - Zentyal - 4 сервера. Надеюсь от DDoS UDP поможет.

GHBB
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.