squid & SUSEfirewall одновременно

Привет! Я настроил squid с аутентификацией. И хочу использовать его на одной машине с susefirewall. Знаю что в настройках SFW есть параметр FW_REDIRECT он перенаправляет исходящий трафик на сквид, и сквид может работать только как прозрачный прокси сервер, при этом фаервол свои правила не применяет. Нужно чтобы трафик шёл сначала по правилам firewall’а а потом по правилам прокси (или наоборот не суть). Это возможно?

Совсем не понял вопроса. Поясни что ты хочешь сделать подробнее. На самом деле он и так сначала будет проходить правила FW, если используется редирект то это тоже правило фаервола, если добавить правила FW например блокировке трафика на порт сквида, то на сквид ничего не придет. А вот через сквид и его правила, уже будет идти только тот трафик который приходит к нему на порт, либо с помощью редиректа или напрямую. Весь остальной трафик по другим портам естественно к сквиду не попадет.

Да вот нет. Конкретный пример.
на компе внешней сети поднят apache и на нём открыты 3 порта(80 92 8050)
правилом FW_MASQ_NETS фаервола разрешаю ходить только на 92 и 8050 порт сервера.
правилом FW_REDIRECT перенаправляю на squid трафик с 80,92,8050 порта
на сквиде разрешаю ходить только по 80 и 92 порту.
т.е. в пересечении: запрещён 80 порт фаерволом,8050 порт сквидом, 92 порт разрешён обоими.

Однако работает и 92 и 80 порт! т.е. правила фаервола не применились как я понимаю? он просто перенаправил?

А вот и да, любой пакет пришедший на твою машину пройдет через правила фаервола, сусешный фаервол это программа позволяющая в более простом виде задавать правила iptables, через iptables проходит любой пакет, далее он обрабатывается фильтрами, далее либо он маршрутизируется, либо натится, либо отдается приложению открывшему порт. Далее любой исходящий пакет тоже проходит фильтры. Так же ты должен понимать что правило в одной таблице срабатывает только одно самое первое, удовлетворяющее условиям. Если первым попалось правило, которое запрещает прием пакетов с определенного IP, то все последующие разрешающие уже не сработаю и на оборот. Так как сусешный фаервол просто надстройка над iptables, некий приоретет одних настроек павил над другими тоже есть. Подробнее описано в документации к каждой настройке.

Это нефига не разрешающее правило, это правило говорит что надо в проходящем насквозь пакете заменить IP адрес источника на свой и ждать ответа(NAT), думаю если другим правилом запретить входящие из какаой то сети, то до маскарадинга они просто не дойдут.

Тут надо просто узнать что сработает раньше, перенаправление или маскарадинг, думаю что перенаправлению поэтому по портам 80,92,8050 трафик уйдет на сквид, и будет абсолютно без разницы есть правило FW_MASQ_NETS или нет.

Не вижу какаким образом ты запретил 80 порт, если судя по описанию ты перекидываешь пакеты с 80 порта на порт сквида. Вот если бы ты запретил в FW.

Как и предпологалось исходя из настроек. Пропробуй вникнуть в последовательность действий которые применяются над пакетом, и все сразу поймешь. Через FW, в любом случае идут абсолютно все пакеты, что транзитные, что входящие, что исходящие. А сквид по умолчанию случает только определенные порты, как и любая другая программа.

Спасибо гигантское за подробный ответ!
Но как в SFW запретить кроме как маскарадингом? не понятно. по умолчанию вроде как должно быть запрещено всё, но нет. И в примерах всех запрещают только так.

Это же где такие примеры? Все это неправда. На самом деле все настройки фаервола суси описаны в самом файле если прочитать то все вполне понятно, правда желательно в терминах разбираться. По умолчанию запрещено получение пакетов приходящие на внешние интерфейсы, приходящие на внутренний интерфейс пакеты по умолчанию разрешены, это поведение задается опцией FW_PROTECT_FROM_INT.

Конкретные порты с IP, запрещать можно с помощью опций FW_SERVICES_DROP_* и FW_SERVICES_REJECT_* в зависимость от того что надо сделать, просто выбросить пакет или отправить отказ. А отдельно разрешить с помощью FW_SERVICES_* или FW_SERVICES_ACCEPT_*, первое срабатывает раньше. В место звездочки указывается зона для которой создается правило.

Так же можно запрещать и разрешать, не по зонам а вообще можно через опции FW_FORWARD_REJECT, FW_FORWARD_DROP и FW_FORWARD

У меня почему-то удаляет пакеты только FW_FORWARD_REJECT, FW_FORWARD_DROP и только когда squid выключен.
Странно получается :((
Ещё раз опишу цепочку:
у клиента в браузере прописаны настройки прокси-сервера;
поэтому все пакеты браузер шлёт на порт 3128 прокси-сервера;
на прокси, я так понимаю прослушивается порт 3128, всё что туда попадёт сначала проходит через iptables;
далее прокси от себя рассылает пакеты куда надо, т.е. открывает порт 80 или 92 например и отправляет;
всё это опять должно пройти через iptables;
Значит отсекать надо на выходе. Тут и просится как раз правило FW_SERVICES_DROP_INT но оно почему то не срабатывает даже когда squid выключен. А правило FW_FORWARD_DROP при включенном squid не срабатывает. Пакеты уходят-приходят.

Где написано что правило FW_SERVICES_DROP_INT отсекает что-то на выходе? оно выкидывает пришедшие на интерфейс внутренней зоны пакет. Если честно уже не очень хочется вникать в ваши эксперименты, все что мог я уже объяснил. Что вы пытаетесь сделать и самое главное зачем не непонятно. Что пытаетесь утверждать тоже непонятно, так как уверен что фаервол у вас работает в соответствии с документацией, если что-то работает не так как предполагалось, значит вы скорей всего просто не правильно предполагаете.

Давайте так, либо конкретно опишите результат который хотите получить, может подскажу куда вписать. Либо показывайте место в документации где написано что какая то опция должна работать так-то, а на самом деле она работает как то другому на таком то конфиге, попробую показать где ошибка в предположениях, конфиг выложите полностью на SUSE Paste

Пардон! Не так понял FW_SERVICES_DROP_INT т.к. в конфиге ссылка см другое описание, в котором не обьясняется.

Хочу, чтобы squid был запущен, а файерволл отбрасывал пакеты, идущие на конкретный порт(пусть будет 92) или ip.
Сквид и SFW стоят на одной машине, используемой в качестве маршрутизатора.
Сквид работает непрозрачно, на браузере клиентских машин прописан прокси сервер и порт 3128.
вот конфиг SFW](http://susepaste.org/52946661) пакеты не отбрасываются

Если хотите резать на фаерволе исходящие из сквида пакеты, то думаю вам может помочь только FW_CUSTOMRULES
В него надо писать путь к файлу в котором свои дополняющие правила для iptables. встроенных опций под вашу задачу в самом фаерволе я не знаю.
Но если честно я бы так делать не стал. Такую блокировку по-моему проще делать в самом сквиде.

P.S. Надеюсь вы понимаете что пакет пришедший с клиентской машины(на которой прописан прокси) на фаерволе всегда будет с IP назначения = адресу прокси и портом равным 3128. Даже если клиентский браузер обращается к адресу yandex.ru на порт 80. Пакет к яндесу будет уже исходящий после сквида.