У меня есть Debian Squeeze VPS, настроенный как веб-сервер nginx. По соображениям безопасности я заблокировал все исходящие соединения, кроме соединений с серверами обновлений Debian (это мешает плохим сценариям вызывать домой). PHP также работает под отдельным пользователем. Моя проблема в следующем:
Различные приложения CMS и PHP / Perl / Python должны иметь доступ к веб-службам на других серверах (т. Е. Создавать исходящие HTTP-соединения). Я установил на него squid тем же VPS и хотите использовать его в качестве прозрачного фильтра / прокси, добавляя разрешенные домены в белый список.
Я знаю, как принудительно настроить все исходящие соединения порта 80 через прокси, но это приведет к тому, что собственные запросы прокси будут перенаправлены на себя (т.е. бесконечный цикл). Я также не могу использовать модуль ipt_owner для iptables, поскольку компания VPS недвусмысленно сказала мне, что они не собираются его устанавливать.
Есть ли другой умный способ заставить все остальные исходящие HTTP-запросы через прокси-сервер squid на том же компьютере, разрешая при этом собственные запросы прокси?
Если это поможет, у меня также установлен csf.
Спасибо!
Хорошо, отвечая на свой вопрос:
Squid позволяет вам устанавливать TOS для исходящих пакетов. Настройка - tcp_outgoing_tos. Итак, сделайте acl с разрешенными IP-адресами или доменами и установите, например, tcp_outgoing_tos 0x10 whitelist
Пакеты от других приложений обычно имеют TOS 0x0.
Теперь следуйте инструкциям в собственном руководстве Squid http://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxLocalhost#iptables_configuration, но вместо того, чтобы соответствовать владельцу пакета, мы сопоставляем TOS.
# handle connections on the same box (SQUIDIP is a loopback instance)
iptables -t nat -A OUTPUT -p tcp --dport 80 -m tos --tos 0x10 -j ACCEPT
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination SQUIDIP:3127
При использовании csf нам может потребоваться также принять эти пакеты в цепочке OUTPUT таблицы фильтров. Поместите правило в начало цепочки.
iptables -I OUTPUT -p tcp --dport 80 -m tos --tos 0x10 -j ACCEPT