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, которое объясняется на этой вики-странице.