Yvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
5
10:49, 21 февраля 2015

Шлюз в Интернет на базе CentOS 7 x64

Blog post image

Введение

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

Описываемый шлюз - программный, поэтому у системного администратора появляется возможность в выборе наиболее подходящих компонент, которые подходят для решения задач по раздаче Интернета.

Обычно компьютер выполняющий роль программного шлюза имеет в своей конфигурации два сетевых адаптера. Первый сетевой адаптер подключается к сети Интернет, а второй включается в сетевой "switch" (hub). Туда же в "switch" подключают сетевые адаптеры компьютеров, которым нужно дать доступ в сеть Интернет.

Наш шлюз будет состоять из следующего программного обеспечения:

  • CentOS - операционная система уровня предприятия
  • Squid - кэширующий прокси сервер
  • SquidGuard - фильтр для блокировки сайтов (аналоги rejik + DBL или DansGuardian)
  • iptables - стандартная утилита для управления фаерволом Linux
  • HTB.init - шейпер трафика

Перечисленные компоненты роутера будут установлены на новую операционную систему CentOS 7 x64.

 

Краткое содержание записки:

1. Исходные данные

2. Отключаем и удаляем NetworkManager

3. Настройка сетевых адаптеров

4. Установка и базовая настройка Squid

5. Установка и настройка SquidGuard

6. Установка анализатора логов Sarg

7. Настройка firewall

8. Блокировка https сайтов через iptables

9. Установка и настройка шейпера HTB.init

10. Установка и настройка кэширующего DNS сервера

11. Проверка Интернет доступа

12. Установка и настройка DHCP сервера

 

Этап установки операционной системы сознательно - пропущен, так как он стандартен, и в основном требует от пользователя обычных нажатий кнопок - Далее/Далее/Готово. Хотя лучше конечно установить второй жесткий диск и потратить немного времени на настройку программного рейд массив во время установки операционной системы. Мало ли, один жесткий диск может выйти из строя.  А если он сломается, на устранение такой проблемы потребуется много времени. Простои в работе офиса могут снизить прибыль и навредить репутации компании.

После установки ОС первым делом настраиваются сетевые адаптеры, чтобы сервер мог выйти в Интернет и обновить свое программное обеспечения.

 

1. Исходные данные

Здесь описаны данные которые понадобятся при настройке в моих примерах. Как и говорилось выше, сервер имеет два установленных сетевых адаптера.

Первый адаптер выйдет в интернет, его сетевые настройки:

  • Названия интерфейса в ОС: enp0s3
  • IP-адрес адаптера: 217.15.172.50
  • Маска сети: 255.255.255.248
  • Адрес шлюза: 217.15.172.49
  • IP адреса DNS серверов: 217.15.150.1 и 217.15.150.1

Второй адаптер подключен в локальную сеть через SWITCH (HUB):

  • Названия интерфейса в ОС: enp0s8
  • IP-адрес адаптера: 10.168.50.2
  • Маска сети: 255.255.255.0

Какие клиенты будут у шлюза:

  • Ноутбуки с работающими адаптерами в режиме DHCP клиента
  • Стационарные компьютеры с сетевыми картами получающими IP адреса автоматически
  • Разные смартфоны, планшеты
  • Сервера со статическими IP адресами

Что нам нужно от шлюза:

  • Фильтрация трафика
  • Запрет на использование некоторых сайтов
  • Распределение канала
  • Статистика по посещению сайтов
  • Проброс RDP порта 3389 на терминальный сервер

2. Отключаем и удаляем NetworkManager

Вспомогательная утилита операционной системы под названием NetworkManager (NM) облегчает настройку сетевых соединений на пользовательском компьютере, но на сервере от ее работы возникают не понятные глюки. Чтобы лишний раз не тратить время на борьбу с NM, удалите утилиту по следующей инструкции:

# systemctl stop NetworkManager.service

# systemctl disable NetworkManager.service

# yum remove dnsmasq -y

# systemctl enable network.service

# systemctl restart network.service

Открываем файл /etc/sysconfig/network для включения сети:

# vi /etc/sysconfig/network

# включаем сеть, добавляем:

NETWORKING=yes

NETWORKING_IPV6=no

В записке не используется selinux, он отключен:

# vi /etc/sysconfig/selinux

Находим и меняем значение:

SELINUX=disabled

# setenforce 0

 

3. Настройка сетевых адаптеров

Проверяем установленные сетевые адаптеры на нашем сервере, вводим в консоле команду:

# ip a

Blog post image

Видим что есть два не настроенных адаптера enp0s3 и enp0s8. Чтобы настроить интерфейсы потребуется изменить содержимое двух одноименных файлов лежащих в каталоге /etc/sysconfig/network-scripts/

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

# ls /etc/sysconfig/network-scripts/

ifcfg-enp0s3 ifdown-post      ifup-bnep   ifup-routes

ifcfg-enp0s8 ifdown-ppp       ifup-eth    ifup-sit

ifcfg-lo      ifdown-routes    ifup-ippp   ifup-Team

ifdown        ifdown-sit       ifup-ipv6   ifup-TeamPort

ifdown-bnep   ifdown-Team      ifup-isdn   ifup-tunnel

ifdown-eth    ifdown-TeamPort  ifup-plip   ifup-wireless

ifdown-ippp   ifdown-tunnel    ifup-plusb  init.ipv6-global

ifdown-ipv6   ifup             ifup-post   network-functions

ifdown-isdn   ifup-aliases     ifup-ppp    network-functions-ipv6

Как видим все на месте, два адаптера помечены жирным шрифтом.

 

Первый адаптер ifcfg-enp0s3

Открываем первый файл /etc/sysconfig/network-scripts/ifcfg-enp0s3

Настраиваем его -  дописываем или меняем сетевые реквизиты:

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

HWADDR=08:00:27:DF:58:83

TYPE=Ethernet

BOOTPROTO=static

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=no

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_PEERDNS=yes

IPV6_PEERROUTES=yes

IPV6_FAILURE_FATAL=no

NAME=enp0s3

UUID=9825ca5b-d916-4514-b3ac-fdc7964c8362

ONBOOT=yes

IPADDR=217.15.172.50

NETMASK=255.255.255.248

GATEWAY=217.15.172.49

Жирным шрифтом помечены изменения которые были внесены мною.  Здесь дописаны такие основные параметры как:

  • IP адрес компьютера
  • указан признак статического адреса для хоста
  • маска сети
  • адрес шлюза

Теперь укажем адреса DNS серверов.

В файл /etc/resolv.conf  вписываем IP адрес DNS сервера провайдера:

# vi /etc/resolv.conf

nameserver 217.15.150.1 //указываем первичный DNS провайдера

nameserver 217.15.150.2 //указываем вторичный DNS провайдера

Примечание: В новой версии CentOS 7 x64, после отключения NetworkManager,  иногда нужно за место "nameserver <IP server>"  прописывать "DNS1=<IP server>"

После изменения сетевых настроек, перезапустим сетевую службы:

# systemctl restart network.service

Теперь можно проверить наличие интернета на сервере простым "пингом":

# ping google.ru

 

Второй адаптер ifcfg-enp0s8

Открываем второй файл /etc/sysconfig/network-scripts/ifcfg-enp0s8

И дописываем или меняем сетевые реквизиты:

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s8

HWADDR=06:10:27:DF:18:83

TYPE=Ethernet

BOOTPROTO=static

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=no

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_PEERDNS=yes

IPV6_PEERROUTES=yes

IPV6_FAILURE_FATAL=no

NAME=enp0s8

UUID=6825ca5b-j916-4514-b3ac-аdc7964c8367

ONBOOT=yes

IPADDR=10.168.50.2

NETMASK=255.255.255.0

Разрешим пересылку пакетов через наш шлюз:

# vi /etc/sysctl.conf

#Добавляем в файл строку:

net.ipv4.ip_forward = 1

Применим новую настройку без перезагрузки:

# sysctl -p

Заодно перезапустим сетевую службу:

# systemctl restart network.service

 

4. Установка и базовая настройка Squid

В этом разделе установим Squid и настроим его для работы в прозрачном режиме.

Установим Squid:

# yum install squid wget -y

Откроем конфигурационный файл прокси сервера для настройки:

# vi /etc/squid/squid.conf

Находим строчку в файле:

http_port 3128

Меняем ее значение на:

http_port 10.168.50.2:3128 intercept

И добавляем к этой строчке строку:

http_port 3129

Поставим службу прокси сервера в автозагрузку:

# systemctl enable squid

Запустим его:

# systemctl start squid

Блокировка потокового Video/Audio в Squid, чтобы пользователи не смогли просматривать онлайн видео и слушать аудио с сайтов.

Открываем файл /etc/squid/squid.conf и добавляем в конец файла:

##Настройки для блокировки видео и аудио##

# Файл /etc/squid/users.txt - содержит список обычных пользователей

acl locnet src "/etc/squid/users.txt"

# Файл /etc/squid/vip-users.txt - содержит список VIP пользователей

acl viplocnet src "/etc/squid/vip-users.txt"

# Типы видео и аудио потоков которые мы будем блокировать из файла /etc/squid/mime.conf

acl mimeblock rep_mime_type -i ^video/*

acl mimeblock rep_mime_type -i ^audio/*

acl mimeblock rep_mime_type -i ^application/x-futuresplas

acl mimeblock rep_mime_type -i ^application/x-shockwave-flash

acl mimeblock rep_mime_type -i ^application/x-cdlink

http_access deny mimeblock !viplocnet

http_reply_access deny mimeblock !viplocnet

# разрешаю только своей сети

http_access allow   locnet

# все остальные получают HTTP403

http_access deny    all

Файл /etc/squid/users.txt содержит диапазон компьютеров:
10.168.50.10-10.168.50.255
Файл /etc/squid/vip-users.txt содержит IP адреса начальства:
10.168.50.3
10.168.50.4
10.168.50.5
10.168.50.6
10.168.50.7
10.168.50.8
10.168.50.9

Дополнительные настройки, добавляем в конец файла:

####Дополнительные настройки####

cache_dir ufs /var/spool/squid 50249 16 256

visible_hostname CompanyProxy

dns_nameservers 10.168.50.2 8.8.8.8

cache_mem 512 MB

maximum_object_size 16 MB

maximum_object_size_in_memory 4 MB

####Дополнительные настройки####

 

5. Установка и настройка SquidGuard

Обычно после установки SquidGuard, идет его настройка по следующим шагам:

  • Настраивается прокси сервер Squid для работы с SquidGuard
  • Качается база в которой содержаться www и IP адреса для блокировки нежелательный сайтов
  • В SquidGuard указываются IP адреса компьютеров кому надо запрещать доступ
  • А также в SquidGuard указывают что требуется блокировать: порно, рекламу, онлайн видео и т.д.
 

Скачаем пакет фильтра SquidGuard (SG) и установим его:

# wget http://pkgs.repoforge.org/squidguard/squidguard-1.3-2.el6.rf.x86_64.rpm

# yum install squidguard-1.3-2.el6.rf.x86_64.rpm -y

К сожалению лежащий в репозитории Epel пакет SquidGuard оказался не рабочим, во время старта всегда вываливался в "Segmentation Fault". Поэтому установил пакет от предыдущей ОС. Как починят этот пакет, можно будет его ставить.

Настроим прокси сервер Squid для работы с SquidGuard, откроем файл /etc/squid/squid.conf

# vi /etc/squid/squid.conf

# добавьте эти строки в конец файла

######## Настройки для SquidGuard #########

url_rewrite_program /usr/bin/squidGuard

redirect_program /usr/bin/squidGuard -c /etc/squid/squidguard.conf

# Если конфигурационный файл находится в другом месте, указываем его так:

# redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf

redirect_children 5

redirector_bypass on

Создаем два каталога, первый для хранения базы, второй для хранения логов:

# mkdir /var/squidGuard

# mkdir /var/log/squidGuard

Ставим владельца на созданные каталоги, пусть им будет пользователь squid:

# chown -R squid:squid /var/squidGuard

# chown -R squid:squid /var/log/squidGuard

Настраиваем SquidGuard:

  • Указываем время работы бана
  • Указываем IP адреса кому блокировать сайты, открываем файл /etc/squid/squidguard.conf:

Ставим время работы фильтра, открываем файл /etc/squid/squidguard.conf:

# TIME RULES:

# Время работы бана с 09 до 18:00 каждый день кроме субботы и воскресенья

time workhours {

weekly mtwhf 09:00 - 18:00

date *-*-01  09:00 - 18:00

}

Указываем IP адреса кому блокировать сайты, открываем файл /etc/squid/squidguard.conf:

# vi /etc/squid/squidguard.conf

# меняем значение строк: указываем каталог хранения логов SG, базу URL и IP адресов для блокировки.

dbhome /var/squidGuard

logdir /var/log/squidGuard

# Вписываем ПК админов и начальства - им все разрешено.

# Чей IP попадет в  этот диапазон - тому все разрешено.

src admin {

ip              10.168.50.3-10.168.50.9

}

# Вписываем диапазон сети - кому что-то запрещено.

# Чей IP попадет в  этот диапазон - тому многое может быть запрещено.

src foo-clients {

ip              10.168.50.10-10.168.50.250

}

Качаем списки доступа, по этим спискам будут блокироваться нежелательные сайты и IP адреса:

# cd /var/squidGuard

# wget –c http://www.shallalist.de/Downloads/shallalist.tar.gz

# tar xzvf shallalist.tar.gz

Скажу от себя:  списки работают, но некоторые сайты не блокируются.

После распаковки появится каталог /var/squidGuard/BL со содержимым:

BL/anonvpn/urls

BL/anonvpn/domains

BL/adv/

BL/adv/urls

BL/adv/domains

BL/global_usage

BL/religion/

BL/religion/urls

BL/religion/domains

BL/sex/

BL/sex/education/

* * * * * *

Каждый подкаталог - это категория для блокировки, например нам нужно заблокировать рекламу, не проблема, используем подкаталог adv (advertising). Аналогично с подкаталогом porn (porngraphy).

Категории - они же подкаталоги содержать в себе два файла основных файла:

  • urls
  • domains

В первом файле содержаться www адреса для блокировки, а второй файл несет в себе IP адреса.

Когда мы будем блокировать надо будет указывать нужный каталог чтобы заблокировать просмотр онлайн видео, порнографию или рекламу.

Настраиваем SquidGuard для блокировки сайтов, открываем файл /etc/squid/squidguard.conf:

# vi /etc/squid/squidguard.conf

dest adv {

domainlist      BL/adv/domains

urllist         BL/adv/urls

redirect        http://admin.foo.bar.de/cgi/blocked?clientaddr=%a+clientname=%n+clientuser=%i+clientgroup=%s+targetgroup=%t+url=%u

}

dest porn {

domainlist      BL/porn/domains

urllist         BL/porn/urls

redirect        http://admin.foo.bar.de/cgi/blocked?clientaddr=%a+clientname=%n+clientuser=%i+clientgroup=%s+targetgroup=%t+url=%u

}

dest movies {

domainlist      BL/movies/domains

urllist         BL/movies/urls

redirect        http://admin.foo.bar.de/cgi/blocked?clientaddr=%a+clientname=%n+clientuser=%i+clientgroup=%s+targetgroup=%t+url=%u

}

acl {

admin {

pass     any

}

foo-clients within workhours {

pass     good !in-addr !adv !porn !movies any

} else {

pass any

}

Здесь я захотел блокировать рекламу, контент для взрослых и онлайн кинотеатры. Если вам нужно что-то еще заблокировать, посмотрите внутренность каталога /var/squidGuard/BL/, может там есть подходящая вам категория.

Для того чтобы squidGuard мог использовать черные списки, запустите конвертацию командой:

# squidGuard -d -C all

# systemctl restart squid

Создаем дополнительный каталог для логов:

# mkdir /var/log/squidguard

# chown -R squid:squid /var/squidGuard

# chown -R squid:squid /var/log/squidGuard

# chmod -Rf g+w /var/log/squidGuard

# chmod -Rf g+s /var/log/squidGuard

# chown -R squid:squid /var/log/squidguard

Если сайты не блокируются, смотрите логи в каталогах: /var/log/squid и /var/log/sguidGuard

 

6. Установка анализатора логов Sarg

# wget http://pkgs.repoforge.org/sarg/sarg-2.3.1-1.el6.rft.x86_64.rpm

# yum install sarg-2.3.1-1.el6.rft.x86_64.rpm httpd -y

# vi  /etc/sarg/sarg.conf

Здесь много разных настроек, подправим его под наши нужды:

########## sarg.conf########

# Файл лога Squid
access_log /var/log/squid/access.log

# Шрифт используемый Sarg'ом
graph_font  /etc/sarg/fonts/DejaVuSans.ttf

# Включаем построение графика

graphs yes

graph_days_bytes_bar_color orange

# Кодировка UTF-8

charset UTF-8

Откроем файл sarg.conf:

# vi /etc/httpd/conf.d/sarg.conf

В этом файле добавляем строчку:

Allow from All

Эта настройка открывает доступ к отчетам анализатора для всех ПК.

Запустим и поместим веб сервер Apache в автозагрузку:

# systemctl enable httpd

# systemctl start httpd

Запустим Sarg в тестовом режиме:

# sarg -x

Здесь мы запустили Sarg в отладочном режиме, на экран будет выведено много информации для отладки. Если в процессе тестового запуска будут ошибки, значить надо устранить проблемы и запустить отладку еще раз. Если все хорошо, вы увидите отчет в директории /var/www/sarg/. Также этот отчет можно посмотреть введя в браузере http://10.168.50.2/sarg

Blog post image

 

Выбираем текущее время, день, неделю, месяц для просмотра отчета.

 

Blog post image

 

Выбираем IP адрес, по которому хотим увидеть отчет.

 

Blog post image

 

Смотрим статистику.

 

Blog post image

 

Можно увидеть график, если щелкнуть пиктограмму графика:

Blog post image

 

7. Настройка Firewall

Настройка фаерволла должна идти по следующей последовательности:

1. Чистка всех цепочек

2. Закрыть все и вся (DROP).

3. Пропускать все уже инициированные и их дочерние соединения.

4. Разрешить локальные соединения.

5. Форвардинг.

6. Пишем что открыть, пробросить и другие свои дополнительные правила  и  т. п.

 

Предварительно отключаем Firewalld и устанавливаем iptables:

# systemctl stop firewalld

# systemctl disable firewalld

# yum install iptables-services  -y

# systemctl enable iptables

Можно сразу поменять порт SSH с 22 на 1234 в целях безопасности, открываем файл /etc/ssh/sshd_config:

# vi /etc/ssh/sshd_config

Находим строку под номером 17

#Port 22

Меняем ее на:

Port 1234

 

Создаем файл с правилами фаерволла:

# vi /etc/sysconfig/firewall.sh

 

# file: /etc/sysconfig/firewall.sh

#!/bin/bash

#Очистка всех цепочек

iptables -F

iptables -F -t nat

iptables -F -t mangle

iptables -X

iptables -X -t nat

iptables -X -t mangle

#Политика по умолчанию - запретить все, что не разрешено

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

#Включаем корректировку MSS (максимальный размер сегмент), чтобы не было фрагментации пакетов. Необходимо из за разных значений MTU

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#Пропускать уже инициированные, а также их дочерние пакеты на входящие соединения

iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

#Пропускать новые, инициированные, а также их дочерние на выход

iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Пропускать инициированные, а также их дочерние с локалки наружу - пересылка

iptables -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Разрешаем обращение к lo (127.0.0.1) интерфейсу

iptables -A INPUT -i lo -p all -j ACCEPT

iptables -A OUTPUT -o lo -p all -j ACCEPT

#Разрешаем обращение к внутреннему интерфейсу enp0s8  - всем из локальной сети

iptables -A INPUT -i enp0s8 -j ACCEPT

iptables -A OUTPUT -o enp0s8 -j ACCEPT

#Разрешаем обращение к mail, ssh, ftp, dns серверам по протоколу TCP из нашей локальной сети

#iptables -A FORWARD -i enp0s8 -s 10.168.50.0/24 -p tcp -m multiport --dports 21,22,25,110,143,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Разрешаем DNS запросы по протоколу UDP и TCP из нашей локальной сети

#iptables -A FORWARD -i enp0s8 -s 10.168.50.0/24 -p udp -m multiport --dports 53 -j ACCEPT

#iptables -A FORWARD -i enp0s8 -s 10.168.50.0/24 -p tcp -m multiport --dports 53 -j ACCEPT

#Разрешаем пинги с внутреннего интерфейса

iptables -A INPUT -i enp0s8 -p ICMP -j ACCEPT

iptables -A OUTPUT -o enp0s8 -p ICMP -j ACCEPT

# SSH

iptables -A INPUT -p tcp --dport 1234 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 1234 -j ACCEPT

#Настройка NAT и редирект c 80 порта на прокси сервер Squid

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128

# Включаем NAT

#iptables -t nat -A PREROUTING -p tcp -m tcp -s 10.168.50.0/255.255.255.0 --dport 80 -j DNAT --to-destination 10.168.50.2:3128

iptables -t nat -A POSTROUTING -s 10.168.50.0/255.255.255.0 -j SNAT --to-source 217.15.172.50

# Проброс портов с внешнего IP:3389 на 3389 порт внутренней машины с IP - 10.168.50.50

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 10.168.50.50:3389
iptables -t nat -A POSTROUTING -p tcp -d 10.168.50.50 --dport 3389

Даем права на запуск файла (исполняемый файл):

# chmod +x /etc/sysconfig/firewall.sh

Запускаем скрипт c командами iptables и замещаем им текущие правила фаерволла:

# /etc/sysconfig/firewall.sh

# /sbin/iptables-save > /etc/sysconfig/iptables

 

Перезапустит компьютер:

# reboot

 

Примечание: В моих правилах, устройствам выходящим в Интернет - доступны все порты.

 

8. Блокировка https сайтов через iptables

Открываем файл /etc/sysconfig/firewall.sh и вносим туда блокировку неугодных сайтов:

 

iptables -I FORWARD -s 10.168.50.0/24 -p tcp -m string --algo bm --string ".youtube.com" -j DROP
iptables -I FORWARD -s 10.168.50.0/24 -p tcp -m string --algo bm --string ".facebook.com" -j DROP
iptables -I FORWARD -s 10.168.50.0/24 -p tcp -m string --algo bm --string ".vk.com" -j DROP
iptables -I FORWARD -s 10.168.50.0/24 -p tcp -m string --algo bm --string ".my.mail.ru" -j DROP
iptables -I FORWARD -s 10.168.50.0/24 -p tcp -m string --algo bm --string ".odnoklassniki.ru" -j DROP
iptables -I FORWARD -s 10.168.50.0/24 -p tcp -m string --algo bm --string ".vkontakte.ru" -j DROP

 

В этом примере должны блокироваться сайты youtube.com, vk.com, vkontakte.ru, my.mail.ru, odnoklassniki.ru и facebook.com. Эти правила действуют на все ПК которые в локальной сети.

Бывает, что надо сделать исключение для одного или двух ПК, поэтому в конец правил блокировки https сайтов, ставьте правило разрешения доступа для определенных IP адресов, у меня в примере внизу IP адресу 10.168.50.50 разрешены все HTTPS сайты:

iptables -I FORWARD -s 10.168.50.50/24 -p tcp -j ACCEPT

 

9. Установка и настройка шейпера HTB.init

Скрипт HTB.Init позволит вам контролировать скорость входящего и исходящего трафика для локальной сети. Он составляет правила контроля трафика с помощью утилиты tc и дисциплины htb. Подробно можете узнать из документации - http://www.opennet.ru/docs/RUS/LARTC/. Запомните - изменение скорости возможно только исходящего потока. Поэтому входящий трафик для локальной сети меняется настройками внутренней карты, а исходящий трафик локальной сети регулируется настройками внешнего адаптера. Но и здесь есть исключение, входящий трафик можно перенаправлять на виртуальный интерфейс imq или ifb, и далее заниматься управлением входящей скорости. Это полезно, когда у вас одиночный компьютер без второй карты. В основном, такого не делают.

У нас два интерфейса на роутере. Один который зовется как "enp0s3" - подключен к Интернету, провайдер по нему дает нам 8 мбит скорости на входящий трафик и 1 мбит на исходящий трафик. Сетевая карта под именем "enp0s8" подключена в локальную сеть, скорость ее работы 100 мбит. Входящая скорость интернета клиентов локальной сети, будет регулироваться настройками "HTB.init" для внутреннего адаптера локальной сети, а исходящая скорость будет зависеть от настроек шейпера внешнего адаптера шлюза (enp0s3).

Blog post image

Интернет в данном примере поступает от ADSL модема.

Наша задача решить с помощью шейпера следующее:

  • разделение входящей и исходящей скорости канала поровну между машинами локальной сети

Скрипт HTB.init задействует утилиту tc составляя правила с помощью нее и дисциплины htb. Почему используют скрипт HTB.init для контроля скорости трафика? Потому что с помощью него наглядно и легко можно динамически управлять пропускной способностью канала. Что  и нужно обычному пользователю, такому как я :)

Вся идеология этого шейпера строится на классах. Описание классов производится с помощью простых текстовых файлов. Все правила по ограничению скорости лежать в них, эти файлы находятся в папке /etc/sysconfig/htb/

Установим зависимость:

# yum install iproute -y

Скачайте скрипт htb.init с сайта sourceforge.

# wget http://sourceforge.net/projects/htbinit/files/HTB.init/0.8.5/htb.init-v0.8.5/download -O htb.init-v0.8.5

# mv htb.init-v0.8.5 /etc/init.d/htb

# chmod 755 /etc/init.d/htb

Поставьте его в автозагрузку:

# chkconfig htb on

Создайте каталог для конфигурации:

# mkdir -p /etc/sysconfig/htb

Перейдите в каталог конфигурации htb.init:

# cd /etc/sysconfig/htb

Сперва настроим входящею скорость для компьютеров локальной сети.

Создадим корневой  файл enp0s8:

# vi enp0s8

В нем впишем текст:

DEFAULT=20

Здесь строчка DEFAULT=20 задает параметр по которому будет учитываться трафик не попадающий ни под одно правило шейпера.

# vi enp0s8-2.root

Впишем в него:

RATE=100Mbit

Здесь мы указали скорость нашего адаптера локальной сети.

# vi enp0s8-2:20.default

RATE=92Mbit

PRIO=5

LEAF=sfq

# vi enp0s8-2:4.from_router_to_network

RATE=99Mbit

PRIO=4

LEAF=sfq

RULE=10.168.50.0/24,

Здесь запятая говорит нам, что нужно шейпить исходящею скорость (исходящий порт - source port). Без запятой, шейпится входящая скорость (порт назначения - destination port).

# vi enp0s8-2:5.to_network

RATE=8Mbit

PRIO=5

# vi enp0s8-2:5:1025

CEIL=8Mbit

RATE=2Mbit

PRIO=5

LEAF=sfq

RULE=10.168.50.0/24

ИТОГО: Входящая скорость 8Мбит будет распределятся поровну между компьютерами локальной сети 10.168.50.0/24. Если канал не занят, одному компьютеру дается 8Мбит во время закачки, в противном случае скорость делится между качающимися.

Скриншот c сайта speedtest.net, тест запускался на машине в локальной сети:

Blog post image

Как видно из картинки, скорость почти соответствует нашим настройкам. На этом же скрине, уже исходящая скорость тоже распределена. Настройки исходящей скорости смотрите внизу.

Теперь скрин из Download Master:

Blog post image

Здесь у нас почти 8Мбит = 940Кбайт

 

Теперь надо порезать исходящею скорость

Создадим корневой  файл enp0s3:

# vi enp0s3

В нем впишем текст:

DEFAULT=20

# vi enp0s3-2.root

RATE=1Mbit

# vi enp0s3-2:20.default

CEIL=1Mbit

RATE=1Mbit

PRIO=5

LEAF=sfq

 

ИТОГО: Мы дали компьютерам локальной сети 10.168.50.0/24 исходящею скорость в 1Мбит, скорость эта делиться поровну между компьютерами локальной сети, если качает только один ПК, ему дается весь 1Мбит.

При этом мы не трогаем входящею и исходящею скорость самого интернет шлюза в локальную сеть и обратно. Смысла резать локальную скорость - нет.

 

Последний шаг - запуск системы контроля трафика с помощью следующей команды:

# service htb compile

# service htb start

При запуске HTB выйдет окошко с ошибкой:

find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.

Так как ошибка не критичная, и не влияет на работу скрипт, на нее можно не обращать внимания.

Если вы еще не поставили демон в автозагрузку:

# chkconfig htb on

Иногда нужно чистить кэш HTB.Init:

# rm /var/cache/htb.init

 

10. Установка и настройка кэширующего DNS сервера

Установим пакет Bind, который позволит добавить функцию кэширующего DNS сервера на наш шлюз:

# yum install bind -y

Поставим его в автозагрузку:

# systemctl enable named

Настроим его, откроем файл /etc/named.conf и изменим содержимое:

# vi /etc/named.conf

# Прописываем IP адрес который будет слушаться

options {listen-on port 53 { 127.0.0.1; 10.168.50.2;};

# Добавляем строчку и указываем DNS провайдера

forwarders { 217.15.11.11;};

# Указываем кому разрешено брать DNS запросы

allow-query { localhost; 10.168.50.0/24; };

forward first;

auth-nxdomain no;

Запускаем службу named:

# service named start

 

11. Проверка Интернет доступа

Проверим работу шлюза, для этого возьмем свободный компьютер с установленной Windows XP в нашей локальной сети. В настройках сетевой карты пропишем:

IP адрес - 10.168.50.20

Маска  - 255.255.255.0

Адрес шлюза - 10.168.50.2

DNS сервер - 10.168.50.2 или DNS провайдера - 8.8.8.8

Адрес DNS сервера берем нашего шлюза или провайдерский.

Blog post image

Откроем браузер и введем www.google.kz

 

12. Установка и настройка DHCP сервера

Чтобы не настраивать всем компьютерам сетевые платы, установим DHCP сервер, который будет автоматически проставляь нужные IP адреса:

# yum install dhcp -y

Создаем конфигурационный файл /etc/dhcp/dhcpd.conf

# Отключаем динамическое обновление DNS

ddns-update-style      none;

# Иногда бывает нужно оставлять адрес внешней сети 217.15.172.48

# subnet 217.15.172.48 netmask 255.255.255.248 {}

# Адрес локальной сети где буду раздаваться адреса

subnet 10.168.50.0 netmask 255.255.255.0 {

# Не обязательные параметры

# Время аренды в секундах

default-lease-time     600;

# Максимальное время аренды в секундах

max-lease-time         7200;

# Параметры передаваемые dhcp-клиентам

# Маска подсети

option subnet-mask 255.255.255.0;

# Адрес широковещательной   рассылки

option broadcast-address 10.168.50.255;

# Адрес шлюза

option routers 10.168.50.2;

# Список DNS-серверов через запятую

option domain-name-servers 10.168.50.2,8.8.8.8;

range 10.168.50.10 10.168.50.254; # Область выдаваемых адресов

}

Запускаем серверную службу DHCP:

# service dhcpd start

Ставим службу в автозагрузку:

# chkconfig dhcpd on

 

13. Создаем общею папку

Давайте создадим две общие папки на нашем шлюзе, чтобы хранить в них разные дистрибутивы программ и отсканированные документы. Эти папки будут видны Windows машинам по сети.

Устанавливаем пакет Samba:

# yum install samba -y

Создаем каталог /samba:

# mkdir /samba

Создаем каталог для от сканированных документов

# mkdir /samba/scan

Создаем каталог для дистрибутивов программ:

# mkdir /samba/distr

Даем полные права всем:

# chmod 777 /samba/scan && chmod 777 /samba/distr

 

Правим конфигурационный файл Samba:

# vi /etc/samba/smb.conf

#===== Global Definations ======
[global]
workgroup = WORKGROUP
server string = Scan Server %v
netbios name = scan
security = user
map to guest = bad user
dns proxy = no
#===== Share Definitions =======
[Scan]
path = /samba/scan
browsable =yes
writable = yes
guest ok = yes
read only = no
[distr]
path = /samba/distr
browsable = yes
writable = yes
guest ok = yes
read only = no
#==== DISABLE PRINTERS ======
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes

Ставим службу Samba в автозагрузку:

# chkconfig smb on

# chkconfig nmb on

Перезапускаем Samba:

# service smb restart

# service nmb restart

Blog post image

Зайдите в Сетевое Окружение (Сеть), чтобы найти наш шлюз с каталогами distr и Scan

Blog post image

Вот наши каталоги, которые мы прописали в настройках Samba.

Заключение

Мы получили готовый прокси сервер с основными функциями. Проблема раздачи доступа в сеть Интернет - решена. Теперь компьютеры офисной сети могут комфортно выходить во всемирную паутину. Не осталась проблема блокировки  неугодных сайтов, закрыты популярные "https" сайты, которые портят всю картину выхода в интернет. Чтобы облегчить канал в Интернет, вырезан весь flash видео контент, что позволило запретить офисным работникам смотреть фильмы на работе. Я в начале писал, что шлюз наш программный, это сделано не просто так, чтобы увеличить возможности шлюза, вы можете до укомплектовать его необходимым дополнительным программным обеспечением или настроить некоторые параметры системы под ваши нужды. Например, на шлюз можно установить OpenVPN чтобы разрешить проблему безопасного доступа в локальную сеть из вне. Или установить какой нибудь биллинг, чтобы контролировать трафик и ставить ограничения по квотам.

 
Маленький To Do List для настройки следующего шлюза:
1. Ограничением трафика по пользователям
2. Статистикой по пребываем сайтам, отчеты
4. Аутентификацией пользователей по AD, тех кто не в домене по ip.
5. Два провайдера
6. Блокировка HTTPS сайтов через Squid
 

Ссылки:

Блокировка сайтов HTTPS через прозрачный Squid

5