место в рейтинге
  • 1024775
  • 673
  • 84
Нравится блог?
Подписывайтесь!

Шлюз на CentOS 6 или связка Squid + sarg + iptables + HTB.init

Введение

Предлагаю свой вариант настройки шлюза для доступа в Интернет на основе связки CentOS + squid + sarg + iptables + HTB.init. Данное решение подойдет для малой компании.

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

Данная записка устарела, так как вышла CentOS 7, предлагаю ознакомиться с новой запиской http://yvision.kz/post/461594

   

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

1. Кирпичики из которых построен шлюз

2. Вводные данные

3. Установка операционной системы CentOS 6.5 x64

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

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

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

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

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

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

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

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

12. Источники информации

     

1. Кирпичики из которых построен шлюз

 

Связка состоит из:

  • Squid - кэширующий прокси сервер работающий по протоколу http/ftp
  • Sarg - анализатор логов для Squid (у этой программы есть аналоги: Free-SA и LightSquid)
  • iptables - утилита для настройки встроенного фаервола
  • HTB.init - полезный скрипт, шейпер трафика (нарезка канала)
   

2. Вводные данные

 

Здесь описаны данные которые понадобятся при настройке в моих примерах:

  • IP-адрес локальной сети: 192.168.50.0/255.255.255.0
  • Внутренний IP-адрес шлюза: 192.168.50.2
  • Внешний IP-адрес шлюза: 10.168.50.2
  • IP-адрес DNS сервера провайдера: 217.15.11.11
  • Сетевые интерфейсы: eth0 - Интернет и eth1 - локалка
   

3. Установка операционной системы CentOS 6.6 x64

 

Если у вас не установлена операционная система CentOS 6 x64, установите ее. Образ этой операционной системы лежит на следующих ftp серверах:

http://mirror.neolabs.kz/centos/6.6/isos/x86_64/CentOS-6.6-x86_64-bin-DVD1.iso

или

http://mirror.yandex.ru/centos/6.6/isos/x86_64/CentOS-6.6-x86_64-bin-DVD1.iso

Я устанавливал эту систему в минимальной установке.

Теперь когда система установлена, первым делом настройте сетевые адаптеры.

   

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

 

У нас сервер играет роль шлюза в Интернет, поэтому он должен иметь два сетевых адаптера.

Операционная система CentOS по умолчанию, дает установленным сетевым картам имена "ifcfg-eth0" и "ifcfg-eth1". В итоге у вас будет два файла:

  • /etc/sysconfig/network-scripts/ifcfg-eth0
  • /etc/sysconfig/network-scripts/ifcfg-eth1

Система Windows адаптеры например обзывает как "Сетевое Подключение по Локальной сети 1" и "Сетевое подключение по Локальной сети 2"

Настройка сетевых адаптеров производится путем редактирования файлов /etc/sysconfig/network-scripts/ifcfg-ethX

В нашем случае этих файлов два, так как сервер имеет всего два сетевых установленных интерфейса.

Откроем первый файл, который отвечает за первый адаптер. Подключим этот интерфейс к Интернету.

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

DEVICE="eth0"
HWADDR="08:00:27:79:17:85"
NM_CONTROLLED="no"
ONBOOT="yes"
GATEWAY=10.168.50.1
IPADDR=10.168.50.2
PREFIX=24
BROADCAST=10.168.50.255
DNS1=217.15.11.11

Жирным шрифтом, я пометил свои изменения, которые произвел в этом файле.

Теперь пришла очередь второго файла, отвечающего за сетевую карту подключенную в локальную сеть.

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

DEVICE="eth1"
HWADDR="08:00:27:1D:7B:43"
NM_CONTROLLED="no"
ONBOOT="yes"
IPADDR=192.168.50.2
PREFIX=24

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

# service network restart

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

   

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

   

Установим и не много настроим Squid.

# yum install squid -y

Прокси сервер Squid установлен, настроим его под наши скромные нужды, включим прозрачный режим. Открываем файл /etc/squid/squid.conf

# vi /etc/squid/squid.conf

Найти в нем строчку:

http_port 3128

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

transparent

Получится так:

http_port 3128 transparent

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

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

# chkconfig squid on

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

# service squid start

Установим вспомогательные пакеты, такие как веб сервер "Apache", утилиту закачки файлов "wget".

# yum install httpd wget gd system-config-firewall-tui mc setuptool -y

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

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

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

# sysctl -p

Пришла очередь анализатора логов, займемся установкой Sarg.

   

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

   

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

# rpm -ivh sarg-2.3.1-1.el6.rft.x86_64.rpm

Теперь отредактируем конфигурационный файл /etc/sarg/sarg.conf

# vi  /etc/sarg/sarg.conf

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

#### sarg.conf####
access_log /var/log/squid/access.log                  # Файл лога Squid
graph_font  /etc/sarg/fonts/DejaVuSans.ttf    # Шрифт используемый Sarg'ом

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

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

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

Allow from All

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

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

# chkconfig httpd on

# service httpd start

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

# sarg -x

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

   

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

   

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

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

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

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

4. Локальные разрешить.

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

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

Итого смотря на эту последовательность, становится ясно как настраивает правильно фаервол.

Осталось настроить фаервол и шейпер. Но для начала надо отключить:

  • Встроенную цепочку iptables - RH-INPUT

Отключаем встроенную цепочку "RH-Input":

# setup

Firewall Configuration -> Убрать звездочку -> OK -> YES-> QUIT

Для настройки фаервола, создайте файл /etc/sysconfig/firewall.sh

# vi /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

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

iptables -A INPUT -i eth1 -j ACCEPT

iptables -A OUTPUT -o eth1 -j ACCEPT

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

iptables -A FORWARD -i eth1 -s 192.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 eth1 -s 192.168.50.0/24 -p udp -m multiport --dports 53 -j ACCEPT

iptables -A FORWARD -i eth1 -s 192.168.50.0/24 -p tcp -m multiport --dports 53 -j ACCEPT

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

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

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

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

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

#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 192.168.50.0/255.255.255.0 -j SNAT --to-source 10.168.50.2

 

Вставляем наш скрипт в автозагрузку:

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

# vi /etc/rc.d/rc.local

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

/etc/sysconfig/firewall.sh    # Наш скрипт правил фаервола!


 

Теперь давайте прикрутим шейпер HTB.init.

   

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

   

У нас два интерфейса на роутере, один который зовется eth0 подключен к Интернету, провайдер по нему дает следующие скорости  20 мбит на входящий и 10 мбит на исходящий трафик.

Сетевая карта под именем eth1 подключена в локальную сеть, скорость ее работы 100 мбит.

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

* отдельная полоса для таких сервисов как ssh, http и игрового трафика (CS 1.6).

* разделение канала поровну между машинами

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

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

Примечание: Входящая скорость регулируется изменением настроек внутреннего адаптера, исходящая скорость настраивается путем корректировки параметров внешнего адаптера.

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

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

# 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

 

Настроим скорость входящего трафика для локальной сети - адаптер eth1

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

# vi eth1

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

DEFAULT=20

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

Теперь создадим файл который будет описывать максимальную скорость этого интерфейса:

# vi eth1-2.full20mbit

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

RATE=20Mbit

CEIL=20Mbit

Здесь RATE описывает гарантированную пропускную способность, а CEIL описывает максимальную доступную скорость.

А теперь давайте займемся самими ограничениями (нарезкой канала).

Создадим файл eth1-2:10.ssh:

# vi eth1-2:10.ssh

RATE=128Kbit

CEIL=20Mbit

RULE=*:22

PRIO=1

BURST=128Kb

Здесь мы даем гарантированную ширину канала в 128Кбит для сервиса ssh.

Параметр RATE как раз описывает эту скорость. Как и выше было написано CEIL это у нас максимальная доступная скорость если канал не нагружен.

Параметр как RULE описывает порт который нужно контролировать (наш сервис ssh).

Приоритет задается параметром PRIO, у нас он имеет наивысшее значение.

Создадим файл eth1-2:11.contra:

# vi eth1-2:10.contra

RATE=3Mbit

CEIL=5Mbit

RULE=*:27015

PRIO=1

 

Создадим файл eth1-2:11.web:

# vi eth1-2:10.web

RATE=256Kbit

CEIL=20Mbit

RULE=*:3128

LEAF=sfq

PRIO=1

 

Здесь параметр LEAF=sfq  отвечает за равномерное распределение канала между участниками локальной сети, всем достанется поровну.

# vi eth1-2:20.default

RATE=256Kbit

CEIL=20Mbit

LEAF=sfq

PRIO=5

 

Настроим скорость исходящего трафика

Теперь займемся адаптером внешней сети eth0, здесь нет ограничений.

# vi eth0-2.full10mbit

RATE=10Mbit

CEIL=10Mbit

# vi eth0-2:10.localnet

RATE=10Kbit
CEIL=10Mbit
LEAF=sfq
RULE=192.168.50.0/24
PRIO=10

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

# 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

   

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

   

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

# yum install bind -y

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

# chkconfig named on

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

# vi /etc/named.conf

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

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

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

forwarders { 217.15.11.11;};

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

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

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

# service named start

   

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

   

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

IP адрес - 192.168.50.10

Маска  - 255.255.255.0

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

DNS сервер - 192.168.50.2 или DNS провайдера - 217.15.11.11

 

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

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

   

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

   

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

# yum install dhcp -y

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

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

ddns-update-style      none;

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

subnet 192.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 192.168.50.255;

# Адрес шлюза

option routers 192.168.50.2;

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

option domain-name-servers 192.168.50.2,217.15.11.11;

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

}

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

# service dhcpd start

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

# chkconfig dhcpd on

   

12. Источники информации

 

В записке использовалась информация со следующих сайтов:

1. http://linuxportal.ru/print.php/87_0_3_0_M/

2. http://ras.pl.ua/howto_configure_htb_init_on_office_router/

3. http://linux-bash.ru/mseti/74-htb.html

4. http://www.opennet.ru/docs/RUS/iptables/

5. http://alexvolkov.ru/ustanovka-squid-na-centos.html

6. http://www.theadmin.ru/linux/centos/nastrojka-autentifikacii-squid-v-domene-windows-s-pomoshhyu-ntlm/

7. http://www.alsigned.ru/?p=462

 
Almas AkeHayc
Пишу для себя, блог как записная книжка. Со временем все забывается, а у меня оно все в бложике. Будьте упертым глухим бегемотиком :)
28 марта 2012, 15:15
34335

Loading...

Комментарии

отличная статья !!!
мини добавка )
для тех кто использует SARG в WEBMIN могут возникнуть проблемы при генерации отчета:
SARG: (grepday) Fontname /usr/share/sarg/fonts/DejaVuSans.ttf not found
решение:
mkdir /usr/share/sarg/
cp -R /etc/sarg/fonts /usr/share/sarg/
Вебмин не использую.
Спасибо за коммент.
А как быть с RTP траффиком SIPа?
Не понял, то есть чтобы звонили с локальной сети в Интернет?
порт 5060 используется только для установления соединения SIP. Данные передаются по RTP портам диапазона 10000:20000. Так что ваш шейпинг никакой полосы гарантированной SIPу не даеть ((
das11
0
0
Все сделал, как написано. Нет переадресации портов с 80-го на 3128. При указании в браузере порта 3128 все работает.
Комментарий удалён автором поста.
Подправил, теперь все работает. Я оказывается правило iptables стер)
Полезная статья. Только чуток недопиленная...с этими настройками получается, что можно ходить как через squid, так и мимо него...как в проверке и получилось...
Это наверно из за правила:
iptables -t nat -A POSTROUTING -s 192.168.50.0/255.255.255.0 -j SNAT --to-source 10.168.50.45

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

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Исламская ипотека в Казахстане: в этом году выйдет на розничный рынок

Исламская ипотека в Казахстане: в этом году выйдет на розничный рынок

Многие клиенты, вздыхая о харамном ссудном проценте местных банков, сокрушались по поводу отсутствия у нас халяльного кредитования. Поддержка исламского банкинга на уровне МФЦА есть...
DanaJarlygapova
24 марта 2017 / 18:28
  • 21928
  • 64
Рианна за $2 млн. Очередные понты от «ЭКСПО-2017»

Рианна за $2 млн. Очередные понты от «ЭКСПО-2017»

Концерт Рианны всё-таки состоится летом в рамках культурно-зрелищных и спортивных мероприятий ЭКСПО-2017. Рианна крута, с этим никто не спорит. Но соберёт ли «Астана Арена» 30 тысяч зрителей при...
openqazaqstan
29 марта 2017 / 14:29
  • 18838
  • 15
КТЖ подарило iPhone мошеннику за краденную фотографию

КТЖ подарило iPhone мошеннику за краденную фотографию

Украл в супермаркете — отправился в полицию. Украл фотографию — выиграл новенький iPhone 7 от КТЖ. Вот такая нехитрая получается история. Огромное спасибо Тамерлану Жумабекову, который обратил моё...
andche
вчера / 0:06
  • 12367
  • 22
Компания LG Electronics открыла предзаказ на новый флагман LG G6

Компания LG Electronics открыла предзаказ на новый флагман LG G6

LG Electronics объявляет о начале предварительного заказа онлайн на новый смартфон LG G6. Оформить предзаказ можно на сайтах магазинов электроники до 16 апреля 2017 года.
LG Electronics
24 марта 2017 / 14:20
  • 5273
  • 0
Димаш, Головкин, Есентаева... О героях нашего времени – истинных и «картонных»

Димаш, Головкин, Есентаева... О героях нашего времени – истинных и «картонных»

В прессе, в соцсетях, на ТВ, во всём информационном пространстве Казахстана –заразная эпидемия. Что сказал Головкин, что съела Есентаева, что китайцы подарили Димашу...
openqazaqstan
вчера / 15:54
  • 4152
  • 22
Страну, где так строят дороги, победить невозможно!

Страну, где так строят дороги, победить невозможно!

Шестиминутный ролик про строительство автомобильной дороги в США - это как острый нож в пузо нашим чиновникам. Они же подавятся бешбармаком, увидев его! Похлеще любого пропагандистского фильма...
Timur_Tregulov
24 марта 2017 / 11:26
  • 5144
  • 41
Почему наши парни выглядят как агашки? Хочется им сообщить, что мода на пафос прошла

Почему наши парни выглядят как агашки? Хочется им сообщить, что мода на пафос прошла

Когда уже люди смогут самоутверждаться за счет своего интеллекта, энергии, познаний и настоящей красоты, а не за счет авторитетного вида и не менее авторитетного дяди?
Bookenova_smartass
28 марта 2017 / 18:28
  • 4291
  • 91
Это вам не Дисней. Реальный прототип «Красавицы и Чудовища»

Это вам не Дисней. Реальный прототип «Красавицы и Чудовища»

Многие уверенны на 100%, что сказка «Красавица и Чудовище» - это интересная выдумка ее создателей. Однако, действия, происходящие в мультфильме и фильме, имели место в истории, и у главных героев...
Naomi_K
24 марта 2017 / 18:42
  • 5100
  • 36
Семь причин почему вам надо перестать откладывать переезд за границу

Семь причин почему вам надо перестать откладывать переезд за границу

Вы думаете о переезде за границу, но постоянно откладываете дату, потому что вас беспокоит тысяча мелочей, которые могут пойти не так? У меня есть семь причин, почему пора перестать мотать нервы...
Lesch
24 марта 2017 / 17:50
  • 4081
  • 15