LINUX.ORG.RU
решено ФорумAdmin

не получается свернуть весть трафик на локальный 3128.

 , ,


0

1

Вот такой вот простенький iptables.
В *nat видна попытка свернуть всё на сквид. Только ничего не работает.
Не могу понять что упускаю.
сквид запущен. порт слушает в интерцепт.

*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth+ -j MASQUERADE
-A PREROUTING -i eth2 -p tcp --dport 80 -j REDIRECT --to-port 3128
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3128 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -o eth+ -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

★★★★★

Ответ на: так ? от dada

так не отработало. у redirect нет --to-destination. заменил на dnat. только по моему это не совсем нужно.
получилось так:
-A PREROUTING -i eth2 -p tcp --dport 80 -j DNAT --to-destination 10.46.12.1:3128

dada ★★★★★
() автор топика

Проверь telnet'ом для начала ( не забудь что условие " -i eth2" )

Во время проверки смотри

watch -n 2 'iptables -nvx -L -t nat'
watch -n 2 'iptables -nvx -L'

основное внимание - на счётчик пакетов. Поймёшь, какие правила срабатывают

З.Ы. Ты случайно не забыл про

echo 1 > /proc/sys/net/ipv4/ip_forward
?

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

Ты случайно не забыл про

не забыл.
по счётчику меняется только прерутинг.
с клиента делал телнет на 80-ый.

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

да.
и нетстат показывает эстаблишед

# netstat -na | grep 10.46.12.101
tcp        0      0 10.46.12.1:3128             10.46.12.101:49604          ESTABLISHED 

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

я теперь ещё больше запутался.
дело в сквиде ?
но браузер не вытаскивает сквидовский эррор.

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

Ну и прекрасно. Забудь про iptables, с ним всё в порядке. Дальше смотри в сторону squid.

Во-первых логи при обращении из браузера ( из браузера проще проверять )

Во-вторых можно и через telnet. Две строки с GET и HOST, потом пустая строка

[...]
Escape character is '^]'.
GET / HTTP/1.1 
HOST: ya.ru

HTTP/1.1 200 Ok
Server: nginx  
[...]
router ★★★★★
()
Ответ на: комментарий от dada

я не слишком много работал с интерцептом в сквиде ( он слишком ограниченно применим, особенно из-за ssl и нестандартных портов ). Возможно, сквид маскируется.

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

Плюс в браузере страница о невозможности подключиться как правило мало информативна. Лучше смотреть встроенный отладчик ( F12 в большинстве современных браузеров )

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

я не слишком много работал с интерцептом в сквиде

согласен.
но сейчас у меня задумка самодельного captive portal, посмотрим что получится.

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

Две строки с GET и HOST, потом пустая строка

Многие сервера понимают просто «GET /»

$ telnet google.com 80
Trying 173.194.32.132...
Connected to google.com.
Escape character is '^]'.
GET /
HTTP/1.0 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
...
anonymous
()
Ответ на: комментарий от dada

С wireshark работать умеешь?

Открываешь дапм, собранный tcpdump'ом ( tcpdump -i eth2 -s0 -w /tmp/dump host 10.46.12.101 )

применяешь фильтр

( tcp.flags.syn == 1 ) and not ( tcp.flags.ack == 1 )

получаешь список соединений. Затем на интересующем соединении «analyze -> follow tcp stream»

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

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

При наличии http/1.1 и name based virtual hosts просто get почти бесполезен.

З.Ы. Тем более для прозрачного прокси, который без HOST вообще ничего сделать не сможет

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

я разобрался.
Проблема оказалась в том, что виндовый клиет по дефолту отправляет на гейт выданный по dhcp, а не на тот который ему был выдан.
Попытки найти где это тыкается не привели к успеху.

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

У меня ещё один вопрос, надеюсь подкинешь что почитать.

У меня два правила в iptables:

-A PREROUTING -s 10.46.12.101 -p tcp --dport 443 -j REDIRECT --to-port 80
-A PREROUTING -s 10.46.12.101 -p tcp --dport 80 -j REDIRECT --to-port 80
Почему когда я открываю какой-то сайт(http), у меня удачно редирект идёт.
А если открою facebook.com, редиректа нет.
С https надо как-то по другому ?

dada ★★★★★
() автор топика

А ничего что это разные протоколы? В случае https, сначала устанавливается ssl сессия.

Я squid-in-the-middle ( SslBump ) не использовал за ненадобностью, читай http://wiki.squid-cache.org/Features/SslBump . Подозреваю, что простого редиректа будет недостаточно.

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