… всё просто и понятно

Centos 7.0 и Squid 3.3.8

В новой центоси обновили некоторые пакеты, в том числе squid, и теперь он может перестать работать со старым конфигом iptables. Здесь необходимо пояснение: у меня шлюз и прокси-сервер находятся на разных машинах, а NAT должен осуществляться строго на машине со сквидом. Конечно, можно попробовать гнать трафик через два сквида, но я так не пробовал делать и считаю, что это вариант для тех, кто знает толк в извращениях.
На шлюзе пока что Centos 6.5, но это не имеет значения, а на прокси — уже 7.0, и это таки важно. Прокси ходит в инет не через шлюз, а вообще по другому маршруту, так что следующие конфиги могут заработать не у всех.

На шлюзе надо маркировать http трафик:

iptables -t mangle -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j MARK --set-xmark 1

добавить таблицу для прокси:

echo "2 proxy" >> /etc/iproute2/rt_tables

посредством iproute2 добавить правило и маршрут для маркированного трафика:

ip rule add fwmark 1 table proxy
ip route add default via 192.168.1.1 dev eth0 table proxy

Чтобы не прописывать правило и маршрут после каждого перезапуска, можно добавить их в специально обученные файлы:

echo "fwmark 1 table proxy" > /etc/sysconfig/network-scripts/rule-eth0
echo "default via 192.168.1.1 dev eth0 table proxy" > /etc/sysconfig/network-scripts/route-eth0

На прокси-сервере тоже надо кое-что сделать, например редирект с 80 порта на 3128 и отправку трафика далее:

iptables -t nat -A PREROUTING -s 192.168.1.1 -p tcp -m tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

порт 3128 больше не нужен:

iptables -t nat  -A PREROUTING -p tcp -m tcp --dport 3128 -j DROP

а 3129 порт пригодится для https в ручном режиме — по очевидным причинам это непрозрачно и настраивается со стороны пользователя. В конфиге squid’а должно быть такое:

http_port 3128 intercept
http_port 3129

У пользователя https via proxy можно настроить посредством FoxyProxy в браузере.

Условные обозначения:
eth0 — сетевой интерфейс шлюза, смотрящий в локальную сеть;
--set-xmark 1 — можно использовать любое число для маркировки разнообразного трафика;
2 proxy — можно использовать любое число, главное чтобы оно было уникальным в /etc/iproute2/rt_tables, слово “proxy” тоже можно заменить по аналогичному принципу;
192.168.1.1 — ip-адрес прокси-сервера, через него гоним исходящий http-трафик.
eth1 — сетевой интерфейс прокси-сервера, смотрящий в интернет;

Ссылки по теме:
http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.netfilter.html
http://www.reddit.com/r/linux/comments/1dv2×2/on_mitigating_the_great_squid_31x_33x_upheaval/
http://www.faqs.org/docs/Linux-mini/TransparentProxy.html
http://grokbase.com/t/centos/centos/099bmc07mq/persisting-iproute2-routes-and-rules

P. S.: если у вас firewalld, то проще всего начать с его удаления и установки iptables-services.

11.07.2014, 13:22
[ Вверх ] [ На главную ]