1 (29.05.2011 20:44:53 отредактировано Acuk)

Доброго дня.
Нужна помощь. Ситуация такая:
Есть ТВ с Netcast и 2хМБИТНЫЙ канал через прокси. Нужно завернуть траффик с ТВ на прокси
Netcast использует порты 80 и 443
Прокси не требует аутентификации
Маршрутизатор Asus wl-600g со встроенным linux 2.6.8.1
Телевизор подключен к роутеру по проводу к 1-му LAN порту
Собрал такую конструкцию(правил конфиг. файлы в роутере):

iptables -t nat -A PREROUTING -i eth0 -p all --dport 80 -j REDIRECT --to-ports 888(Порт прокси) --to-destination (IP прокси)
iptables -t nat -A PREROUTING -i eth0 -p all --dport 443 -j REDIRECT --to-ports 888(Порт прокси) --to-destination (IP прокси)

Но работать такая конструкция отказывается.

Возможно собака зарыта в неверных параметрах или недогруженности некоторых модулей:
пытался сделать "insmod ipt_REDIRECT.ko но рутер пишет, что использование модуля невозможно, хотя это его собственный модуль из папки ядра.
Вообще и-нет АДСЛ, но тарифы моего провайдера оставляют желать и желать, поэтому выкручиваюсь с прокси. На Виндовом компе проблем не возникало, но Линуксовый роутер поставил меня в тупик.
Если есть знатоки iptables, прошу помочь. Заранее признателен за любую помощь.

2

Acuk, оба порта => на один? Может 80 => X и 443 = > Y?

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

3 (29.05.2011 21:40:25 отредактировано Acuk)

Я же заворачиваю пакеты на прокси. а там как ни крути один порт =)

4

Вот кое что про перенаправление:

Перенаправление портов нужно в том случае, если мы хотим «замаскировать» внутреннюю службу, обеспечив к ней доступ извне не по стандартному, а совсем по другому порту. Конечно, можно заставить сам веб-сервер слушать нестандартный порт, но если он используется рядовыми сотрудниками внутри локальной сети, то мы элементарно столкнёмся с человеческим фактором. Сотрудникам будет очень тяжело объяснить, что теперь для доступа к корпоративному сайту надо после его имени вводить набор цифр через двоеточие.

Именно из-за человеческого фактора перенаправление портов используется, в основном, специалистами, для удалённого администрирования.

Пусть $FAKE_PORT - обманный порт на внешнем интерфейсе шлюза, подключившись к которому мы должны попасть на адрес $LAN_IP и порт $SRV_PORT.

Набор правил для iptables будет отличаться несущественно, поэтому приведу сразу пример итогового скрипта для ленивых.

#!/bin/bash
EXT_IP="xxx.xxx.xxx.xxx" # Он всё равно чаще всего один и тот же.
INT_IP="xxx.xxx.xxx.xxx" # См. выше.
EXT_IF=eth0 # Внешний и внутренний интерфейсы.
INT_IF=eth1 # Для шлюза они вряд ли изменятся, поэтому можно прописать вручную.
FAKE_PORT=$1  # Вначале передаём скрипту "неправильный" порт на внешнем интерфейсе,
LAN_IP=$2     # затем - локальный адрес сервера
SRV_PORT=$3   # и в конце - реальный порт для подключения к серверу

# Здесь опять надо сделать проверку ввода данных, потому что операции всё ещё серьёзные.

iptables -t nat -A PREROUTING -d $EXT_IP -p tcp -m tcp --dport $FAKE_PORT -j DNAT --to-destination $LAN_IP:$SRV_PORT
iptables -t nat -A POSTROUTING -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT -d $EXT_IP -p tcp -m tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT

По сути изменилась только первая строчка, поскольку только она отвечает за первичную обработку входящих пакетов. Дальше всё следует по стандартной процедуре таблиц и цепочек правил.

Изменения в остальных правилах сделаны для наглядности и их сути не меняют.

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

5

Тут вроде для доступа в мою локальную сеть извне, несколько другое, хотя по духу близко.
Мне нужно поправить заголовки пакетов, чтобы прокси сервер смог их обработать и перенаправить (Прокси сервер не в моей Локальной сети)
Плохо понимаю логику команд и аргументов в iptables поэтому немогу корректно наваять скрипт.

6

Сейчас некогда, ну всё - равно щаз Kettler появиться он со сквидом побольше возился, так что подожди.  smile

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

7

Нарыл в интернетах кой-какую инфу:

Задача: нужно сделать переадресацию с определённого ip порта 6669 на другой ip, только на порт 6667:

Решение:
iptables -t nat -A PREROUTING -s 192.168.62.0/24 -d 192.168.100.14 -p tcp --dport 6669 -j DNAT --to-destination 192.168.62.1:6667

'REDIRECT' можно использовать при перенаправлении портов _только_ на локальной машине. Сделать так, как это описано в совете (перенаправить с одного адреса на другой), с REDIRECT не получится.

Похоже как раз мой случай. Буду пробовать завтра, о результатах отпишусь.

8

Acuk, я из твоего задания понял, что на одной машине всё делается, тогда редирект, если на разных, то это проброс:
Я тут справочку себе закинул:
http://zenon.sytes.net/probros-porta-v-iptables/

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

9 (30.05.2011 05:45:43 отредактировано Acuk)

Спасибо, то что нужно. Действительно не очень четко сформировал цель.
PS не знал, что проксирование тоже натом рулится. Думал для этого какие-то отдельные средства нужны.
Спасибо за помощь.

Добавлено:
Что-то все-равно не получается.
Ввожу дополнительные данные:
Проброс требуется установить до сервиса yota music.
ip 94.25.208.227
пакеты идут на порты 80 и 443
мне нужно пустить их через прокси хх.хх.хх.хх:888, находящийся в интернетах
Телевизору присвоен ip 192.168.1.3(dhcp), ip адрес роутера 192.168.1.1
Как заскриптовать?
Попробовал:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -d 94.25.208.227 -p tcp/all --dport 80/443 -j DNAT --to-destination xx.xx.xx.xx:888
Без видимого эффекта: пакеты как шли так и идут напрямую, не через прокси.

10

ап. Вопрос все еще актуален.

11 (01.06.2011 17:34:52 отредактировано Kettler)

iptables -t nat -A PREROUTING -s 192.168.1.0/24  --dport 80/443 -j DNAT --to-destination xx.xx.xx.xx:888

При этом ток forward правило accept

или

iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 --dport 80 -j DNAT --to-destination 192.168.0.1:80
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 --dport 443 -j DNAT --to-destination 192.168.0.1:443

Ток 443 сквозной толком не пашет!

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

12 (01.06.2011 17:38:41 отредактировано Acuk)

iptables -t nat -A PREROUTING -s 192.168.1.0/24  --dport 80/443 -j DNAT --to-destination xx.xx.xx.xx:888

При этом ток forward правило accept

То есть к созданному добавить еще одно правило вида:
iptables -A FORWARD -i eth0 -d LOCAL_IP -p All --dport 80/443 -j ACCEPT
Верно понимаю?

13 (01.06.2011 17:40:14 отредактировано Kettler)

Так читабельнее
#80
iptables -A FORWARD -s 192.168.1.0/24 -d $ipsquid --dport 80 -j ACCEPT
iptables -A FORWARD -s $ipsquid -d 192.168.1.0/24 --sport 80 -j ACCEPT
443
iptables -A FORWARD -s 192.168.1.0/24 -d $ipsquid --dport 443 -j ACCEPT
iptables -A FORWARD -s $ipsquid -d 192.168.1.0/24 --sport 443 -j ACCEPT

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

14 (01.06.2011 20:01:53 отредактировано Acuk)

Kettler, у меня нет сквида - ибо линукс встроен в роутер (wl-600g), ресурсы ограничены. Надо обойтись средствами iptables. Но чего-то не получается.
Еще раз подробно:
Имею роутер wl-600g и ADSL интернет к нему 6mbit во внутреннюю сеть провайдера.
В этой сети есть прокси через который надо получить выход в интернеты (конкретизирую - до сервиса yota-music) Прокси незапаролен
Netcast в телевизоре использует порты 80 и 443.
Локальную сеть перенастроил: отключил dhcp: телевизер имеет ip 192.168.1.3

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination xxxxxxxxx:3128
iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination xxxxxxxxx:3128


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

15

Не должен и не будет.
Пробуй вот такой скрипт

#!/bin/bash
$ipsquid=10.213.1.1
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 --dport 80 -j DNAT --to-destination $ipsquid:80
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 --dport 443 -j DNAT --to-destination $ipsquid:443

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

16

БИНГО!
Видимо дело было в непроброшенном порте и помогли эти строки:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

Огромное спасибо за помощь! Дальше разберусь.

17 (01.06.2011 20:58:41 отредактировано Kettler)

Теперь надо настраивать firewall
На счёт 443 (https) он не может толком работать в таком режиме.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

18

Acuk пишет:

БИНГО!
Видимо дело было в непроброшенном порте и помогли эти строки:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

Огромное спасибо за помощь! Дальше разберусь.

Значит что-то было закрыто, вообще полностью всё открывать как вы сейчас сделали нельзя, политики по умолчанию хотя бы должны быть:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEP

желательно вот так

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

а уже после этого открывать что-то...

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

19

newzenon я стобой согласен но главное найти проблему а потом от неё плясать.
Да и input просто так закрыть нельзя.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

20

#!/bin/bash
$ipsquid=10.213.1.1
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 --dport 80 -j DNAT --to-destination $ipsquid:80
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 --dport 443 -j DNAT --to-destination $ipsquid:443

Так выглядит набор на стандартных роутерах.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

21

Ну я тут смотрю вы играетесь с 80-ым и 443:
Вот так можно попробовать поступить;

#!/bin/bash
$ipsquid=10.213.1.1
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 80 --sport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 80 --sport 80 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 --sport 80 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 443 --sport 443 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 443 --sport 443 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 443 --sport 443 -j ACCEPT

И уже более точно ясно буде что использовать...

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

22 (01.06.2011 21:54:49 отредактировано Kettler)

iptables -A INPUT -i eth0 -p tcp --dport 80 --sport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --dport 80 --sport 80 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 --sport 80 -j ACCEPT

Forward правил явно мало. как минимум 53. Ещё у него на сквид значиться надо указать его порт.
Да и для обычного роутера слишком жесток

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

23

По=ходу мало кто о P DROP задумывается - ну и раздолье имеем для взлома....  smile

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

24

smile  да ладно что в роутере ломать

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

25

Kettler, эмм forward же открыт и доступ во внутреннюю сетку тоже никто вроде не закрыл, хотя имхо так и паранойю можно заработать.  :lol:

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

26

А тут сам подумай мы прокинули порты во внутрь чтоб их ломать? или как можно?

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

27

Ну если мы порты внутрь прокинули то мы попадем как-раз в пункт назначения.
ы. как-бы из меня взломщик не особо удался... это надо на счет тестирования к этим обращаться ну сам знаешь...  smile

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

28

Forward accept не вскрыть а вот INPUT это да) а OUTPUT всё таки советую закрывать)

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

29 (03.06.2011 21:21:30 отредактировано Acuk)

спасибо за ответы. Причина была в отсутствии правила output для 80 порта.
443 порт действительно нужен лишь для аутентификации в сервисах - пустил его напрямую.
Теперь возник еще один вопрос:
Из проксирования надо исключить все пакеты, идущие на 93.158.134.3:80, то есть пакеты на этот ip должны идти напрямую, минуя прокси.

30 (03.06.2011 21:51:56 отредактировано Kettler)

Неуверен что сработает

#!/bin/bash
$ipsquid=10.213.1.1
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 --dport 80 ! -d 93.158.134.3 -j DNAT --to-destination $ipsquid:80
iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 --dport 443 -j DNAT --to-destination $ipsquid:443

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.