Настройка iptables на сервере локальной сети

Настройка iptables на сервере локальной сети для URL-фильтраций на основе блэклистов

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

Вне зависимости от того, приняли ли вы решение использовать в качестве фильтрующего прокси-сервера только Squid, либо дополнительно настроить редиректор SquidGuard, настройки этих программ полностью аналогичны описанным в соответствующих статьях: Настройка URL-фильтраций на локальном компьютере (только Squid) и Настройка URL-фильтраций на локальном компьютере (Squid+SquidGuard).

Нам необходимо лишь дополнительно настроить iptables на перенаправление запросов приходящих на интернет-шлюз из локальной сети на тот порт, который слушает squid (по умолчанию, параметр http_port 3128 transparent в /etc/squid3/squid.conf).

Примечание: Мы бы мягко рекомендовали «всем желающим» почитать про прозрачный прокси - информации в интернет предостаточно, и тут не может быть 100 % готовых рецептов, слишком много зависит от конкретной ситуации, от конкретного размещения ресурсов в вашей сети. Нашу подборку материалов по этой теме можно посмотреть в статье Как использовать блэклисты?

Рядовой компьютер в локальной сети даже понятия не должен иметь о прокси, у него есть только одна задача – все пакеты, предназначенные не для локальной сети отдать для разбирательства на шлюз по умолчанию, а вот там и обыгрывается ситуация – происходит перенаправление пакетов предназначенных для внешних сетей на сервер, где работает squid.

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

Что касается iptables. Пусть наша сеть - 192.168.8.0/24, шлюз по умолчанию - 192.168.8.1, сервер, на котором развернут squid - 192.168.8.x (Прим.: в случае, если мы устанавливаем squid на шлюз, у нас получается просто проброс пакетов с порта, принимающего пакеты из локальной сети на порт, который «слушает» Squid):

  • разрешаем шлюзу принимать пакеты из локальной сети (иногда, при жесткой политике это стоит указывать явно), пока никакого перенаправления: 

iptables -A INPUT -s 192.168.8.0/24 -p tcp --dport 80 -j ACCEPT

это значит:

  • -s 192.168.8.0/24 – наша локальная сеть;
  • -p tcp -dport 80  - указывает, что мы принимаем пакеты, пришедшие по протоколу http;
  • -j ACCEPT – собственно, разрешение.

 

  • настраиваем перенаправление:

iptables -t nat -A PREROUTING -i eth0 -s 192.168.8.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.8.x:yyyy

это значит:

  • -i eth0  - интерфейс с которого приходят на шлюз пакеты из локальной сети;
  • -s 192.168.8.0/24  - источник пакетов, наша локальная сеть, 255 адресов;
  • -p tcp -dport 80  - указывает, что нас интересуют только пакеты «интернета», а именно, протокол http;
  • -j DNAT -to--destination 192.168.8.x:yyyy  - это указание куда перенаправить, где x – указатель на сервер со squid в нашей локальной сети, уууу – порт который слушает squid.

 

  • реализуем маскарадинг:

iptables -t nat -A POSTROUTING -j MASQUERADE

этим правилом мы все пакеты, ВСЕ, а не только http, с назначением во «внешний мир» маскарадим, т. е. передаем и подставляем вместо реального адреса отправителя (компьютер в локальной сети) адрес, выданный провайдером при подключении (в общем случае именно этим адресом мы представлены в интернет).

Итак, что мы получаем: пакет - «запрос для интернет», вышедший от компьютера в локальной сети, первым делом попадает на шлюз, шлюз, согласно правилу перенаправления, заворачивает его на прокси (squid), там обрабатывается фильтрами посредством SquidGuard, и если фильтры пройдены, пакет направляется squid-ом обратно на шлюз для отправки во «внешний мир», после чего происходит подмена адреса (маскарадинг) и отправка пакета. 

И в завершение. Чтобы при перезагрузке компьютера рассмотренные выше правила фаервола iptables применялись автоматически, стоит добавить их в автозагрузку. Для этого создадим текстовый файл с этими правилами и с правами на исполнение и добавим его в автозагрузку (для Ubuntu это файл /etc/rc.local).