iptables:возможно ли такое

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

shas
Сообщения: 6
ОС: FC7

iptables:возможно ли такое

Сообщение shas »

Hi!

Сделал попытки реализовать следующее и закрались смутные сомнения:"А возможно ли оно".

Задача вроде бы банальная.
Есть сервер с внешним (ххх.ххх.ххх.ххх) и внутренним (192.168.0.5) адресами.
На этом сервере запущена некая программа, которая слушает только на внутреннем интерфейсе
порт 2000.
Надо, подключившись с внешнего интерфейса, попасть на внутренний на порт 2000.
Из вне на компьютер во внутренней сети пробросить соединение не составляет проблемы.
Но в поставленной выше задаче такие способы почему-то не срабатывают.
Т.о. вариации на тему
-A PREROUTING -p tcp -d ххх.ххх.ххх.ххх --dport 2000 -j DNAT --to-destination 192.168.0.5:2000
не решили проблему.

Подскажите, плиз, как реализовать желаемое?
Спасибо сказали:
Denikin
Сообщения: 119

Re: iptables:возможно ли такое

Сообщение Denikin »

может быть это поможет http://opennet.ru/docs/RUS/iptables/#DNATTARGET
Спасибо сказали:
shas
Сообщения: 6
ОС: FC7

Re: iptables:возможно ли такое

Сообщение shas »

Denikin писал(а):
30.01.2010 20:37
может быть это поможет http://opennet.ru/docs/RUS/iptables/#DNATTARGET


Может и поможет, но я не знаю как это применить в моём случае.
В подобных примерах подразумевается, что адрес внутренней сети принадлежит
другому компьютеру, а не самому серверу.
Вообщем пробовал я варианты с DNAT'ом, но не помогло.
Отсюда два варианта: неправильно пробовал или то, что мне надо - невозможно.
Спасибо сказали:
Аватара пользователя
mandreika
Сообщения: 217
ОС: Debian 3,4,5,6

Re: iptables:возможно ли такое

Сообщение mandreika »

Попробуй программный редирект rinetd или xinetd+redirect на 127.0.0.1
или
iptables -t nat -A PREROUTING -p tcp --dport 2000 -j DNAT --to-destination 127.0.0.1
iptables -t nat -A POSTROUTING -p tcp --dport 2000 -j SNAT --to-source 127.0.0.1
Спасибо сказали:
shas
Сообщения: 6
ОС: FC7

Re: iptables:возможно ли такое

Сообщение shas »

mandreika писал(а):
30.01.2010 21:37
Попробуй программный редирект rinetd или xinetd+redirect на 127.0.0.1
или
iptables -t nat -A PREROUTING -p tcp --dport 2000 -j DNAT --to-destination 127.0.0.1
iptables -t nat -A POSTROUTING -p tcp --dport 2000 -j SNAT --to-source 127.0.0.1


Спасибо за ответы, но не работает.
Для чистоты эксперимента поступил следующим образом.
Набросал следующую программу:

#!/usr/bin/perl -w
use strict;
use IO::Socket;
my $quit=0;
$SIG{INT}=sub {$quit=1};
my $listen_socket = IO::Socket::INET->new(LocalPort=>5000,
Listen=>5,
Proto=>'tcp',
Reuse=>1,
Timeout=>3600);
die "Error 1:$@" unless $listen_socket;
warn "Waiting for connection...\n";
my $count=0;
while(!$quit){
next unless my $conn=$listen_socket->accept;
$count++;
warn "$count\n";
$conn->close;
}
$listen_socket->close;
warn "Bye!\n"


Вообщем все просто:открыли сокет и слушаем порт 5000. Если что-то пришло - выводим $count.
Если в открытии сокета не указывать LocalAddr, то программа слушает все интерфейсы.
Можно проверить:
telnet 192.168.0.5 5000
telnet 127.0.0.1 5000
telnet xxx.xxx.xxx.xxx 5000
приводят к реакции программы (xxx.xxx.xxx.xxx-внешний IP-шник).

Теперь добавим в открытие сокета конкретный интерфейс:
my $listen_socket = IO::Socket::INET->new(LocalAddr=>'127.0.0.1',
LocalPort=>5000,
Listen=>5,
Proto=>'tcp',
Reuse=>1,
Timeout=>3600);

Теперь к реакции программы приводит только
telnet 127.0.0.1 5000

Так вот вопрос, возможно ли с помощью iptables добиться ответа программы
теперь подключившись с других сетевых интерфейсов?
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: iptables:возможно ли такое

Сообщение pelmen »

как-то уже обсуждалось тут такое. По-моему пришли к тому, что это невозможно.
Спасибо сказали:
shas
Сообщения: 6
ОС: FC7

Re: iptables:возможно ли такое

Сообщение shas »

pelmen писал(а):
31.01.2010 11:56
как-то уже обсуждалось тут такое. По-моему пришли к тому, что это невозможно.

:cray:

Т.е. получается, что если интересующая меня программа запущена на каком-либо компьютере
во внутренней сети, отличном от компьютера, через который осуществляется доступ к внутренней
сети из вне, то задача решается самым тривиальным способом - port forwarding.

Но если все это происходит в рамках одного компьютера, то задача не решается вовсе.

А жаль!
Спасибо сказали:
Аватара пользователя
keir
Сообщения: 317
ОС: linux

Re: iptables:возможно ли такое

Сообщение keir »

Лично у меня эта задача вполне себе решается.
Стоит сервер с двумя интерфейсами vlan1616, 193.169.xxx.xxx и eth0, 192.168.0.1,
требуется обращаться к 192.168.0.1:139 и 192.168.0.1:445 (samba, которая слушает только домашнюю сеть) с внешней стороны. Вот правила:

Код: Выделить всё

iptables -t nat -I PREROUTING -i vlan1616 -p tcp -s 10.42.194.0/24 -d 193.169.xxx.xxx/32 --dport 139 -j DNAT --to-destination 192.168.0.1:139
iptables -t nat -I PREROUTING -i vlan1616 -p tcp -s 10.42.194.0/24 -d 193.169.xxx.xxx/32 --dport 445 -j DNAT --to-destination 192.168.0.1:445

Надо указать входное устройство. Ну а -s это уже для пущей безопасности.
Trust №1
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: iptables:возможно ли такое

Сообщение pelmen »

вспомнил. в той теме софтина, слушающая только на внутреннем интерфейсе принимала сообщения только с адресов внутренней сети. и вроде как именно такая задача была помечена как нерешаемая :)
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: iptables:возможно ли такое

Сообщение Alexxx »

Странно всё это...
Я squid пробрасываю наружу, когда надо следующим:

Код: Выделить всё

$IPT -t nat -A PREROUTING -p tcp --dport 3128 -j DNAT --to-destination 192.168.10.1
$IPT -A FORWARD -i $INET_IFACE -p tcp --dport 3128 -m state --state NEW -j ACCEPT
Всё работает
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: iptables:возможно ли такое

Сообщение pelmen »

Ну у тебя сквид поймает пакеты, в которых адрес отправителя - внешний адрес клиента из интернета, а ТА утилита такие пакеты отбрасывала, типа "хочу только 192.168.0.0/24"
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: iptables:возможно ли такое

Сообщение Frank »

Раз программа слушает loopback (127.0.0.1) интерфейс, то пробрасывать порт надо будет дважды: один раз - из интернета во внутресеть, на НАТящем сервере, и второй раз - непосредственно на самом компьютере с этой софтиной - из внутрисети в loopback интерфейс.
Изображение
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: iptables:возможно ли такое

Сообщение pelmen »

Два раза - да, но там такая задача стояла специфическая:
Комп один, подключен к интернету (внешний адрес), на нем стоит софтина, которая так коряво написана, что к ней можно подключиться только из сетей класса С. Вот и решили тогда, что эта задача одним компом не решается. Пытался найти тему - но это гиблое дело. Она года 2 назад поднималась.
Спасибо сказали:
shas
Сообщения: 6
ОС: FC7

Re: iptables:возможно ли такое

Сообщение shas »

Frank писал(а):
31.01.2010 19:02
Раз программа слушает loopback (127.0.0.1) интерфейс, то пробрасывать порт надо будет дважды: один раз - из интернета во внутресеть, на НАТящем сервере, и второй раз - непосредственно на самом компьютере с этой софтиной - из внутрисети в loopback интерфейс.


Я эту программу просто для проверки сделал.
И loopback тоже взял наобум.
Пусть сокет создается на внутреннем интерфейсе:
my $listen_socket = IO::Socket::INET->new(LocalAddr=>'192.168.0.5',
LocalPort=>5000,
Listen=>5,
Proto=>'tcp',
Reuse=>1,
Timeout=>3600);


Я могу получить реакцию программы в таком случае если нахожусь во внешней сети?
Спасибо сказали:
expdot
Сообщения: 176
ОС: Fedora 13, Win Vista

Re: iptables:возможно ли такое

Сообщение expdot »

можно поднять промежуточный интерфейс. ищи про ifb
заставить программу слушать с него
затем по порту перенаправлять пакеты с внешнего и внутреннего интерфейса на псевдо интерфейс

вот пример

Код: Выделить всё

# создаем псевдо устройство
modprobe ifb
ip link set dev ifb0 up
# перенаправляем с внутреннего порта
tc filter add dev $LAN parent ffff: protocol ip prio 10 u32 \
   match u32 0 0 match u32 dport $PORT 0xff flowid 1:1 \
   action mirred egress redirect dev ifb0
# перенаправляем с внешнего порта
tc filter add dev $WAN parent ffff: protocol ip prio 10 u32 \
   match u32 0 0 match u32 dport $PORT 0xff flowid 1:1 \
   action mirred egress redirect dev ifb0


конечно, в таком виде не будет работать, но идея понятна
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: iptables:возможно ли такое

Сообщение pelmen »

expdot писал(а):
01.02.2010 23:22

Код: Выделить всё

# создаем псевдо устройство
modprobe ifb
ip link set dev ifb0 up
# перенаправляем с внутреннего порта
tc filter add dev $LAN parent ffff: protocol ip prio 10 u32 \
   match u32 0 0 match u32 dport $PORT 0xff flowid 1:1 \
   action mirred egress redirect dev ifb0
# перенаправляем с внешнего порта
tc filter add dev $WAN parent ffff: protocol ip prio 10 u32 \
   match u32 0 0 match u32 dport $PORT 0xff flowid 1:1 \
   action mirred egress redirect dev ifb0
:wacko: На днях хотел почитать про tc, этот пост отбил все желание
Спасибо сказали:
expdot
Сообщения: 176
ОС: Fedora 13, Win Vista

Re: iptables:возможно ли такое

Сообщение expdot »

я тоже боюсь некоторых конструкций, но если разобраться то в целом ничего :)
если собираетесь изучать то читайте lartc
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: iptables:возможно ли такое

Сообщение Alex2ndr »

[offtop]
pelmen писал(а):
01.02.2010 23:54
:wacko: На днях хотел почитать про tc, этот пост отбил все желание


expdot писал(а):
02.02.2010 00:30
я тоже боюсь некоторых конструкций, но если разобраться то в целом ничего :)
если собираетесь изучать то читайте lartc

Да - синтаксис tc просто страшен :)
Если уж хотите почитать то lartc не особо советую - мутно написано. Вот хорошая статейка по HTB - http://www.opennet.ru/base/net/htb_manual.txt.html - гораздо приятнее читается
[offtop]
Спасибо сказали:
DSS
Сообщения: 390

Re: iptables:возможно ли такое

Сообщение DSS »

shas писал(а):
30.01.2010 19:59
Подскажите, плиз, как реализовать желаемое?

rinetd ещё не пробовали?
Спасибо сказали:
shas
Сообщения: 6
ОС: FC7

Re: iptables:возможно ли такое

Сообщение shas »

DSS писал(а):
03.02.2010 08:24
shas писал(а):
30.01.2010 19:59
Подскажите, плиз, как реализовать желаемое?

rinetd ещё не пробовали?


Попробовал только с помощью xinetd, но с тем же результатом.
Похоже при данных начальных условиях задача не решается,
либо решается уж совсем сложными решениями.

можно поднять промежуточный интерфейс. ищи про ifb
заставить программу слушать с него


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

Всем большое спасибо за участие в обсуждении.
Думаю тему можно закрывать.
Спасибо сказали: