В этой записке рассмотрена установка и настройка шлюза в Интернет для малой сети. Шлюз, он же прокси сервер, выполняет главную задачу — организует общий доступ в Интернет, чтобы компьютеры локальной сети могли выйти во всемирную паутину. Помимо основной задачи, программный шлюз может также выполнять дополнительные функции, такие как: запрет доступа на некоторые сайты, вырезать разное содержимое с просматриваемых сайтов, распределять канал доступа между компьютерами локальной сети, пробрасывать порт с внешнего IP адреса до определенной машины локальной сети и т.д.
Описываемый шлюз — программный, поэтому у системного администратора появляется возможность в выборе наиболее подходящих компонент, которые подходят для решения задач по раздаче Интернета.
Обычно компьютер выполняющий роль программного шлюза имеет в своей конфигурации два сетевых адаптера. Первый сетевой адаптер подключается к сети Интернет, а второй включается в сетевой «switch» (hub). Туда же в «switch» подключают сетевые адаптеры компьютеров, которым нужно дать доступ в сеть Интернет.
Наш шлюз будет состоять из следующего программного обеспечения:
- CentOS — операционная система уровня предприятия
- Squid — кэширующий прокси сервер
- SquidGuard — фильтр для блокировки сайтов (аналоги rejik + DBL или DansGuardian)
- iptables — стандартная утилита для управления фаерволом Linux
- HTB.init — шейпер трафика
Перечисленные компоненты роутера будут установлены на новую операционную систему CentOS 7 x64.
Краткое содержание записки:
- Исходные данные
- Отключаем и удаляем NetworkManager
- Настройка сетевых адаптеров
- Установка и базовая настройка Squid
- Установка и настройка SquidGuard
- Установка анализатора логов Sarg
- Настройка firewall
- Блокировка https сайтов через iptables
- Установка и настройка шейпера HTB.init
- Установка и настройка кэширующего DNS сервера
- Проверка Интернет доступа
- Установка и настройка 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
Видим что есть два не настроенных адаптера 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
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
Выбираем текущее время, день, неделю, месяц для просмотра отчета.
Выбираем IP адрес, по которому хотим увидеть отчет.
Смотрим статистику.
Можно увидеть график, если щелкнуть пиктограмму графика:
7. Настройка Firewall
Настройка фаерволла должна идти по следующей последовательности:
- Чистка всех цепочек
- Закрыть все и вся (DROP).
- Пропускать все уже инициированные и их дочерние соединения.
- Разрешить локальные соединения.
- Форвардинг.
- Пишем что открыть, пробросить и другие свои дополнительные правила и т. п.
Предварительно отключаем 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
#Пропускать уже инициированные, а также их дочерние пакеты на входящие соединения
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
#Включаем корректировку MSS (максимальный размер сегмент), чтобы не было фрагментации пакетов. Необходимо из за разных значений MTU
iptables -I FORWARD -p tcp —tcp-flags SYN,RST SYN -j TCPMSS —clamp-mss-to-pmtu
#Разрешаем обращение к 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
У нас два интерфейса на роутере. Один который зовется как «enp0s3» — подключен к Интернету, провайдер по нему дает нам 8 мбит скорости на входящий трафик и 1 мбит на исходящий трафик. Cетевая карта под именем «enp0s8» подключена в локальную сеть, скорость ее работы 100 мбит. Здесь пока набросок, входящая скорость для клиентов локальной сети, будет регулироваться настройками «HTB.init» для адаптера локальной сети.
Интернет в данном примере поступает от ADSL модема.
Наша задача решить с помощью шейпера следующее:
- разделение входящей и исходящей скорости канала поровну между машинами локальной сети
Скрипт HTB задействует утилиту tc. Почему используют HTB ? Потому что с помощью него наглядно и легко можно динамически управлять пропускной способностью канала.
Вся идеология этого шейпера строится на классах. Описание классов производится с помощью простых текстовых файлов. Все правила по ограничению скорости лежать в них, эти файлы находятся в папке /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,
Здесь запятая говорит нам, что нужно шейпить исходящею скорость (исходящий порт). Без запятой, шейпится входящая скорость.
# 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, тест запускался на машине в локальной сети:
Как видно из картинки, скорость почти соответствует нашим настройкам. На этом же скрине, уже исходящая скорость тоже распределена. Настройки исходящей скорости смотрите внизу.
Теперь скрин из Download Master:
Здесь у нас почти 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 сервера берем нашего шлюза или провайдерский.
Откроем браузер и введем 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
Зайдите в Сетевое Окружение (Сеть), чтобы найти наш шлюз с каталогами distr и Scan
Вот наши каталоги, которые мы прописали в настройках Samba.
Заключение
Мы получили готовый прокси сервер с основными функциями. Проблема раздачи доступа в сеть Интернет — решена. Теперь компьютеры офисной сети могут комфортно выходить во всемирную паутину. Не осталась проблема блокировки неугодных сайтов, были закрыты популярные «https» сайты, которые портят всю картину выхода в интернет. Чтобы облегчить канал в Интернет, было решено вырезать весь flash видео контент, запретив офисным работникам смотреть фильмы на работе. Я в начале писал, что шлюз наш программный, это было сделано не просто так, чтобы увеличить возможности шлюза, вы можете до укомплектовать его необходимым дополнительным программным обеспечением или настроить некоторые параметры системы под ваши нужды. Например, на шлюз можно установить OpenVPN чтобы разрешить проблему безопасного доступа в локальную сеть из вне. Или установить какой нибудь биллинг, чтобы контролировать трафик и ставить ограничения по квотам.