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

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

Видим что есть два не настроенных адаптера 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

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

  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

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

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 чтобы разрешить проблему безопасного доступа в локальную сеть из вне. Или установить какой нибудь биллинг, чтобы контролировать трафик и ставить ограничения по квотам.

Запись опубликована в рубрике Администрирование. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*

code