Squid+iptables: как разрешить https проходить и обходить Squid?

В основном начал с Squid и iptables сегодня (гугл твой друг). Этот материал будет смертью меня.

У меня есть настройки Squid3 на сервере Ubuntu 9.04 в качестве прозрачного прокси. Он прекрасно работает, когда я использую прокси-сервер в качестве шлюза по умолчанию и т. Д. Правила iptable для этой установки были частью учебника.:П

К сожалению, я не могу получить доступ к https-сайтам (таким как Gmail или что-либо еще на порту 443). Это потому, что Squid не нравится то, что он не может кэшировать, что в данном случае является трафиком https.

Я хотел бы добавить правило iptable, чтобы я мог получить доступ к сайтам https и использовать Skype. В основном, разрешить прохождение этих типов трафика без прокси-сервера Squid? (в обход так сказать)

Кто-нибудь может знать, как это сделать, или иметь ссылку на источники, которые помогут мне разобраться?

Спасибо.

3 ответа

Решение

После того, как я на самом деле подумал о том, чтобы пережевывать свои собственные запястья и мечтать о IP-адресах всю ночь напролет + грубая сила, гуглящая / пытаясь НИЧЕГО, я мог бы взять свои цифровые пальцы, мне удалось собрать что-то, что действительно работает. Я не знаю технических причин, поэтому, если вы можете дать объяснения, пожалуйста, сделайте это!: D

PS: все в объяснении делается через командную строку

PS: это не окончательное решение, а рабочее решение в ответ на мой собственный вопрос.

Вот:

Шаг 1: Нужно было включить IP-пересылку на коробке:

vim /etc/sysctl.conf

// найти и раскомментировать следующее

net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=1

Шаг 2: Добавить правило обратной петли (это больше для случаев, когда все порты закрыты, очевидно, многим приложениям это нужно?

iptables -I INPUT -i lo -j ACCEPT

Шаг 3. Добавьте правила обхода порта 443: (eth1 - это интернет-интерфейс, а xxxx/eth0 - это сетевой интерфейс)

iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t filter -A FORWARD -i eth0 -p tcp --dport 443 -j ACCEPT

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source x.x.x.x

Шаг 4. Затем, наконец, правила, делающие Squid прозрачным:(xxxx - IP-интерфейс локальной сети)

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination x.x.x.x:3128

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source x.x.x.x

Это не правильно. Означает, что каждый пакет TCP/UDP/etc то, что вы отправляете из своей внутренней локальной сети в Интернет, будет использовать в качестве SOURCE IP IP-адрес частной локальной сети (вероятно, 192.178.xx) вместо общего IP-адреса.

Может быть, это поможет вам:

PREROUTING == DestinationNAT -> From Internet to Intern LAN

POSTROUTING == SourceNAT -> From Intern LAN to Internet


iptables -t nat -A PREROUTING -i intern -p tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -A INPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -i intern -p tcp --dport 3128 
iptables -A OUTPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -o extern -p tcp --dport 80
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -i extern -p tcp --sport 80
iptables -A OUTPUT -j ACCEPT -m --state ESTABLISHED,RELATED -o intern -p tcp --sport 80

Для обхода 443 было бы достаточно с:

iptables -I FORWARD -p tcp --dport 443 -j ACCEPT

И если ваш system/squid/firewall также есть роутер от вашей сети до интернета, не забудьте:

iptables -t nat -A POSTROUTING -o extern -j SNAT --to-source Public_external_IP

Для этих объяснений...

Шаг № 1 устанавливает машину в качестве маршрутизатора. Это требуется для любой машины Linux, которая будет принимать или пересылать IP-трафик, предназначенный для машин, отличных от себя. Без этого самые низкие уровни сетевого стека будут отклонять трафик, и NAT даже не получит шанса сделать свое дело.

Шаг № 2 не имеет отношения к проблеме, о которой идет речь. Это может или не может быть необходимо для операций маршрутизатора, не связанных с прокси.

шаг № 3 позволяет машине ретранслировать порт 443 как маршрутизатор. Правило POSTROUTING можно улучшить, используя MASQUERADE вместо SNAT.

шаг #4 обе строки делают одно и то же по-разному. Первая строка может привести к проблемам в будущем, если вы не знаете, в чем разница между DNAT и REDIRECT. Для простоты используйте только REDIRECT.

Чтение http://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxRedirect могло бы избавить вас от многих проблем.

Также в вашей настройке отсутствует критическое правило таблицы mangle, которое объясняется на этой вики-странице.

Другие вопросы по тегам