Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Вопрос по маршрутизации и биллингу.  (Прочитано 12084 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MadKox

  • Автор темы
  • Активист
  • *
  • Сообщений: 441
  • =)
    • Просмотр профиля
    • Моя страница на Launchpad
Понимаю, что не раз уже обсуждалось, но от манов и опиcаний уже кипит мозг и полная неразбериха.  :idiot2:

Итак, задача: сделать шлюз сети (пользователей на 50-100) со следующими условиями:
0. Параметры - внешний интерфейс - фиксированный IP, внутренний - сеть, тоже фиксированные IP. ОС большей частью XP, но планируется плавно заменять на Ubuntu.
1. Предоставить всем пользователям сети доступ к определенному внешнему почтовому серверу.
2. Предоставить ограниченному числу пользователей (назовем их пользователи инета) доступ к http, ftp, icq, skype, https и др.
3. Считать трафик:
    а). Общий;
    б). По каждому пользователю инета;
    в). По почте.
4. Обрезать нежелательные сайты (порно, однокласники/контакт, и др.) - т.е. как и блеклистовые, так и вручную добавленные.

Реализация:
1. - почту пускаю через iptables
2. - делаю прокси - squid с раздачей инета по ncsa.
4. - к сквиду прикручиваю squidGuard.
3. - б). - к сквиду прикручиваю sarg.
3. - а). - mrtg, NeTAMS или что то типа этого. (Кстати, а что лучше/проще настроить?)
3. - в). "Трафик Общий" минус "Сумма трафиков пользователей инета" равно "Трафик Почты"  :)

Я все правильно понял или что-то не так?
Подскажите пожалуйста, правильно ли подобраны приложения, правильная ли схема?
Заранее спасибо.

З.Ы. Если планируется в дальнейшем использовать шлюз еще и как файловый сервер - достаточно прописать правила в iptables до Samb'ы или нужно делать что-то еще?
« Последнее редактирование: 07 Февраль 2008, 09:19:17 от MadKox »
Homo homini admini est...

Оффлайн MadKox

  • Автор темы
  • Активист
  • *
  • Сообщений: 441
  • =)
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Вопрос по маршрутизации и биллингу.
« Ответ #1 : 04 Апрель 2008, 20:41:00 »
Да... какой же я ламер... читаю ^ пост и смеюсь....

Итак - у меня все получилось:

1. Почта, банк-клиенты, https - пропускаются через iptables насквозь.
2. 80 и 21 порт заворачиваются на прозрачный squid.
3. DNS'ом рулит bind9 (как настроил - сам не понял, но работает).
4. К сквиду прикручены sams и squidGuard. DNS в сквиде используется бинд.
5. squidGuard стоит и работает независимо от sams'а.
6. sams работает как счетчик трафика (по IP адресу, который в свою очередь проверяется в iptables на соответствие MAC адресу) и для контроля месячного лимита трафика пользователей (слабодокументированная возможность есть в самсе - работа вообще без редиректора через сам конфиг squid.conf)
7. Прикрутил ntp и samb'у - вообще стало все супер.

Если интересно как что делал - могу написать подробнее.

Да, чуть не забыл - система Ubuntu Server 7.10
Homo homini admini est...

Оффлайн burgui

  • Участник
  • *
  • Сообщений: 109
    • Просмотр профиля
Re: Вопрос по маршрутизации и биллингу.
« Ответ #2 : 05 Апрель 2008, 10:27:03 »
Цитировать
Если интересно как что делал - могу написать подробнее.
Конечно интересно. Напишите подробнее, если не трудно.  :)

Оффлайн Lars

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: Вопрос по маршрутизации и биллингу.
« Ответ #3 : 08 Апрель 2008, 15:46:15 »
Да... какой же я ламер... читаю ^ пост и смеюсь....

Итак - у меня все получилось:

1. Почта, банк-клиенты, https - пропускаются через iptables насквозь.
2. 80 и 21 порт заворачиваются на прозрачный squid.
3. DNS'ом рулит bind9 (как настроил - сам не понял, но работает).
4. К сквиду прикручены sams и squidGuard. DNS в сквиде используется бинд.
5. squidGuard стоит и работает независимо от sams'а.
6. sams работает как счетчик трафика (по IP адресу, который в свою очередь проверяется в iptables на соответствие MAC адресу) и для контроля месячного лимита трафика пользователей (слабодокументированная возможность есть в самсе - работа вообще без редиректора через сам конфиг squid.conf)
7. Прикрутил ntp и samb'у - вообще стало все супер.

Если интересно как что делал - могу написать подробнее.

Да, чуть не забыл - система Ubuntu Server 7.10

Похожая проблема, пиши как трудился!

Оффлайн blackjack

  • Участник
  • *
  • Сообщений: 127
    • Просмотр профиля
Re: Вопрос по маршрутизации и биллингу.
« Ответ #4 : 08 Апрель 2008, 17:40:01 »
Давай приумножай знания человечества, делись. :)

Оффлайн blackjack

  • Участник
  • *
  • Сообщений: 127
    • Просмотр профиля
Re: Вопрос по маршрутизации и биллингу.
« Ответ #5 : 08 Апрель 2008, 17:41:03 »
кстати как єто все будет работать если пользователей будет скажем 2000-3000?

Оффлайн SNaKe_ROOL

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Вопрос по маршрутизации и биллингу.
« Ответ #6 : 16 Апрель 2008, 11:59:22 »
Ну так напишешь или нет!!! А то интересно ашь зубы сводит!!!!!!

Оффлайн blackjack

  • Участник
  • *
  • Сообщений: 127
    • Просмотр профиля
Re: Вопрос по маршрутизации и биллингу.
« Ответ #7 : 16 Апрель 2008, 12:17:30 »
вот именно. Делись давай. :-[

Оффлайн polyak

  • Активист
  • *
  • Сообщений: 288
  • 726f6f745f75
    • Просмотр профиля
Re: Вопрос по маршрутизации и биллингу.
« Ответ #8 : 16 Апрель 2008, 13:09:05 »
«  : 06 Февраля 2008, 18:56:56 »
« Ответ #1 : 04 Апреля 2008, 20:41:00 »
ну за 2 месяцо-то я думаю, что разобраться можно)
726f6f745f75

Оффлайн MadKox

  • Автор темы
  • Активист
  • *
  • Сообщений: 441
  • =)
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Вопрос по маршрутизации и биллингу.
« Ответ #9 : 16 Апрель 2008, 18:52:23 »
Итак пишу что и как делал.

Во-первых хотел извиниться за то, что долго не отвечал - просто не было времени.

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

Итак задача стояла такая:

1. Исходные данные:
     1.1 Есть внутренняя офисная сеть - 192.168.0.0/24 каждому компьютеру в сети задан статический IP адрес.
     1.2 Есть внешняя сеть с инетом - 195.210.ххх.ууу - отдельный кабель от провайдера до шлюза.
     1.3 Есть внешний сервер, стоящий у совсем других людей на адресе 89.249.ххх.ууу - там почта и ftp.
     1.4 Есть некоторое количество банк-клиентов работающих внутри сети, которым нужен доступ к соответствующим узлам в инете.
2. Задача:
     2.1 Сделать сеть недоступной из инета.
     2.2 Сделать инет доступным из сети.
     2.3 Авторизовать каким либо образом каждого пользователя на шлюзе и считать по нему трафик. Если трафик превышает лимит - отключить пользователя. Если у пользователя нет права пользоваться инетом - сделать невозможным его самовольное подключение.
     2.4 Фильтровать содержимое запрашиваемых пользователем ресурсов в соответствии с правами пользователя на просмотр.
     2.5 Обеспечить постоянную неблокируемую работу банк-клиентов.
     2.6 Обеспечить постоянную неблокируемую работу корпоративной почты и ftp  (т.е. только через наш внешний сервер).
3. Исполнение:

Часть 1. IPTABLES.

Я взял за основу приложенный к учебнику по iptables скрипт rc.firewall.txt и немного поправил его для своих нужд:


#!/bin/sh

#
# 1. Конфигурация.
#
# Здесь задаются основные настройки брандмауэра, которые зависят от Вашей конфигурации сети.
#

############################################################################
# 1.1 Настройки интернет.
#
# INET_IP - Здесь должен быть указан реальный IP адрес, выданный провайдером услуг доступа в интернет.
# INET_IFACE - устройство, через которое осуществляется подключение к интернет.
# INET_BROADCAST - широковещательный адрес.
#

INET_IP="195.210.XXX.YYY"
INET_IFACE="eth0"
INET_BROADCAST="195.210.XXX.255"
############################################################################
# 1.2 Настройки локальной сети.
#
# Конфигурация локальной сети.
# LAN_IP - локальный IP адрес брандмауэра.
# LAN_IP_RANGE - широковещательный адрес + маска подсети.
# LAN_IFACE - интерфейс, подключенный к локальной сети.
#

LAN_IP="192.168.0.1"
LAN_IP_RANGE="192.168.0.0/24"
LAN_IFACE="eth1"



############################################################################
# 1.4 Локальный интерфейс "loopback".
#

LO_IFACE="lo"
LO_IP="127.0.0.1"

############################################################################

############################################################################

#
# 1.5 Путь к файлу iptables (обычно "/usr/sbin/iptables" или "/sbin/iptables").
#

IPTABLES="/sbin/iptables"

# Очистка...

$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

#
# 1.6 Дополнительно.
#

# Описываем порты, которые нам могут пригодиться.

# Настраиваем систему таким образом, что
# 1. Пакеты на почту и другие разрешенные сервера мы просто пропускаем насквозь.
# 2. Пакеты, идущие по защищенному соединению (https) мы пропускаем, но подсчитываем
# отдельно, не разбивая на пользователей.
# 3. Всех пользователей мы проверяем на предмет соответствия их IP адресов их MAC адресам.
# 4. Остальные пакеты - перенаправляем на squid.
# 5. И наконец - считаем вообще весь трафик, проходящий через фаервол.


# Порт для HTTPS
HTTPS="443"

# Порт squid.
SQUID="3128"


# Далее порты, которые будем заворачивать на squid

SQV_HTTP="80"
SQV_FTP="21"



# Описываем адреса, которые нам могут пригодиться.
# Тут будут те адреса, до которых доступ будет всегда и у всех,
# независимо от того, можно им в инет, или нет.

#Почта.
IP_MAIL="89.249.XXX.YYY" # Почта 1
IP_MAIL1="62.113.XXX.YYY" # Почта 2

# Порт почты SMTP
MAIL_SMTP="25"

# Порт почты POP
MAIL_POP="110"


# FTP сервер для передачи данных в филиалы - работает у всех.
IP_HICFTP="89.249.XXX.YYY"


# Банк-клиенты.

IP_BANK_1="XXX.YYY.QQQ.ZZZ"
IP_BANK_2="XXX.YYY.QQQ.ZZZ"
IP_BANK_3_1="XXX.YYY.QQQ.ZZZ"
IP_BANK_3_2="XXX.YYY.QQQ.ZZZ"


# Пользователи.

# Пользователь №1
USER_1_IP="192.168.0.2"
USER_1_MAC="00:00:00:00:00:01"

# ............

# Пользователь № N

USER_N_IP="192.168.0.254"
USER_N_MAC="00:00:00:00:00:02"



###########################################################################
#
# 2. Подгрузка модулей.
#

#
# Проверка зависимостей модулей.
#

#/sbin/depmod -a

#
# 2.1 Подгрузка необходимых модулей (нужное раскомментировать).
#

#/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
#/sbin/modprobe iptable_filter
#/sbin/modprobe iptable_mangle
#/sbin/modprobe iptable_nat
#/sbin/modprobe ipt_LOG
#/sbin/modprobe ipt_limit
#/sbin/modprobe ipt_state
#/sbin/modprobe ipt_owner
#/sbin/modprobe ipt_REJECT
#/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_conntrack_ftp
#/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ip_nat_ftp
#/sbin/modprobe ip_nat_irc


# 4. Настройка правил.
#

#
# 4.1 Таблица Filter
#

#
# 4.1.1 Политики по умолчанию
#

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

#
# 4.1.2 Создание пользовательских цепочек
#

#
# Создание цепочки для "плохих" пакетов
#

$IPTABLES -N bad_tcp_packets

#
# Создание отдельных цепочек для различных протоколов
#

$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets

#
# Создние цепочки, которая будет сверять IP и MAC адреса.
#

$IPTABLES -N verify


#
# Создание цепочек для подсчета трафика
#

# Для общего трафика
$IPTABLES -N trafficcount

# Для https
$IPTABLES -N secured


#
# 4.1.3 Содержимое пользовательских цепочек
#


#
# Цепочка bad_tcp_packets
#
# Отфильтровываются все пакеты, которые распознаются как NEW, но не
# являются SYN пакетами, а также обрабатываются SYN/ACK пакеты,
# имеющие статус NEW.
# Эта цепочка может быть использована для защиты от вторжения
# и сканирования портов.
#

$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \
-m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \
--log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

#
# Цепочка allowed
#
# Дополнительная проверка.
# По задумке цепочка вызывается из цепочки tcp_packets, на прошедшие
# проверку пакеты.

# Проверяем, является ли пакет SYN пакетом, т.е. запросом на соединение.
$IPTABLES -A allowed -p TCP --syn -j ACCEPT

# Пропускаем все пакеты с признаком ESTABLISHED и RELATED.
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

# Сбрасываем все остальные пакеты.
$IPTABLES -A allowed -p TCP -j DROP

#
# Цепочка tcp_packets
#
# По идее рулит входящими tcp пакетами из инета.
# Но поскольку у нас нет никаких инет-сервисов в локалке
# мы просто перекидываем все пакеты в allowed.

$IPTABLES -A tcp_packets -j allowed

#
# Правила для UDP.
#

#
# В сетях Microsoft Вас может завалить бродкастами.
# Правило блокирует широковещательные пакеты, поступающие на порты
# со 135 по 139. Эти порты используются протоколами SMB и NetBIOS.
# Данное правило предотвращает переполнение таблицы трассировщика в
# сетях Microsoft.
#

$IPTABLES -A udp_packets -p UDP -i $INET_IFACE -d $INET_BROADCAST \
--destination-port 135:139 -j DROP

#
# Это правило блокирует DHCP запросы извне.
#

$IPTABLES -A udp_packets -p UDP -i $INET_IFACE -d 255.255.255.255 \
--destination-port 67:68 -j DROP


#
# Правила для ICMP.
# Тут проверяется тип ICMP сообщения. Пропускаются только
# ICMP Echo Request, TTL equals 0 during transit и
# TTL equals 0 during reassembly. Все остальные типы ICMP
# сообщений должны проходить и так, т.к. имеют состояние RELATED.
#
#

# Чтобы брандмауэр перестал откликаться на ping -
# закомментируйте эту строчку.
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT


$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

#
# Цепочка для подсчета трафика.
#

$IPTABLES -A trafficcount -p ALL -j RETURN


#
# Цепочка подсчета HTTPS трафика.
#

$IPTABLES -A secured -p tcp --dport $HTTPS -j RETURN



#
# Цепочка верификации IP адреса и MAC адреса пользователя.
#

# Тут поочередно всех проверяем на соответствие - если кто-то себе подставил
# чужой IP - его тупа сбросит.


$IPTABLES -A verify -p ALL -s $USER_1_IP -m mac --mac-source $USER_1_MAC -j RETURN
# .....................
$IPTABLES -A verify -p ALL -s $USER_N_IP -m mac --mac-source $USER_N_MAC -j RETURN
# И напоследок - всем остальным - DROP
$IPTABLES -A verify -p ALL -s $LAN_IP_RANGE -j DROP

#
# 4.1.4 Цепочка INPUT.
#

#
# Фильтруем "плохие пакеты" через цепочку bad_tcp_packets.
#

$IPTABLES -A INPUT -p tcp -j bad_tcp_packets

#
# Правила для "своих" сетей, т.е. не для интернета.
#

$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT


#
# Правила для пакетов, приходящих их интернета.
#

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

# Каждое правило тут - сначала запускает пакет в цепочку подсчета трафика, затем обрабатывет далее

$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED \
-j trafficcount
$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED \
-j ACCEPT

# Отправляем tcp пакеты в соответствующую цепочку.
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j trafficcount
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets

# Отправляем udp пакеты в соответствующую цепочку.
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j trafficcount
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets

# Отправляем icmp пакеты в соответствующую цепочку.
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j trafficcount
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

#
# Клиенты Microsoft Network имеют дурную привычку выдавать огромное количесво
# групповых пакетов в диапазоне адресов 224.0.0.0/8. Поэтому можно использовать данное
# правило для предотвращения засорения логов, в случае, если с внешней стороны
# имеется какая либо сеть Microsoft Network. Подобную же проблему решают два последних
# правила в цепочке udp_packets.
#

$IPTABLES -A INPUT -i $INET_IFACE -d 224.0.0.0/8 -j DROP

#
# Весь отбрасываемый траффик журналируется.
#

$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT INPUT packet died: "

#
# 4.1.5 Цепочка FORWARD.
#

# Фильтруем "плохие пакеты".

$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets

# Пробиваем мак и айпи на соответствие.

$IPTABLES -A FORWARD -p ALL -j verify

# Пропускаем пакеты на известные и разрешенные хосты.

$IPTABLES -A FORWARD -i $LAN_IFACE -d $IP_HICFTP -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -d $IP_BANK_1 -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -d $IP_BANK_2 -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -d $IP_BANK_3_1 -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -d $IP_BANK_3_2 -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -d $IP_MAIL -p tcp --dport $MAIL_SMTP -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -d $IP_MAIL -p tcp --dport $MAIL_POP -j ACCEPT 
$IPTABLES -A FORWARD -i $LAN_IFACE -d $IP_MAIL1 -p tcp --dport $MAIL_SMTP -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -d $IP_MAIL1 -p tcp --dport $MAIL_POP -j ACCEPT


# Пропускаем HTTPS мимо сквида, попутно считая.

$IPTABLES -A FORWARD -i $LAN_IFACE -p tcp --dport $HTTPS -j secured
$IPTABLES -A FORWARD -i $LAN_IFACE -p tcp --dport $HTTPS -j ACCEPT

# Пропускаем пакеты на SQUID.

$IPTABLES -A FORWARD -i $LAN_IFACE -p tcp --dport $SQV_HTTP -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFACE -p tcp --dport $SQV_FTP -j ACCEPT

# Пропускаем ответные пакеты в локальную сеть.

$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j trafficcount
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#
# Весь отбрасываемый траффик журналируется.
#

$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT FORWARD packet died: "

#
# 4.1.6 Цепочка OUTPUT.
#

#
# Фильтруем "плохие пакеты".
#

$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets

#
# Правила OUTPUT, определяющие, какие IP будут допущены.
#

$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT

#
# Весь отбрасываемый траффик журналируется.
#

$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT OUTPUT packet died: "

######
# 4.2 Таблица nat.
#

#
# 4.2.1 Задаем политики по умолчанию.
#

#
# 4.2.2 Создаем пользовательские цепочки.
#



#
# 4.2.3 Содежимое пользовательских цепочек.
#

#
# 4.2.4 Цепочка PREROUTING.
#


# Принимаем те пакеты, которые всегда разрешены и идут
# мимо сквида до того, как они уйдут в сквид.

$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -d $IP_HICFTP -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -d $IP_BANK_1 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -d $IP_BANK_2 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -d $IP_BANK_3_1 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -d $IP_BANK_3_2 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -d $LAN_IP -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -d $IP_MAIL -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -d $IP_MAIL1 -j ACCEPT

# Перенаправляем пакеты на сквид.

$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -p tcp --dport $SQV_HTTP -j REDIRECT --to-ports $SQUID
$IPTABLES -t nat -A PREROUTING -i $LAN_IFACE -p tcp --dport $SQV_FTP -j REDIRECT --to-ports $SQUID

#
# 4.2.5 Цепочка POSTROUTING.
#

#
# Включаем простой IP форвардинг и преобразование сетевых адресов.
#

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP


################################################################

#
# 5. Включение перенаправления пакетов
# Лучше делать это в конце, ибо к моменту включения форвардинга все
# правила уже заданы.

 echo "1" > /proc/sys/net/ipv4/ip_forward


exit 0

Старался сделать его максимально удобочитаемым.

Для подсчета общего трафика и https написал 2 скрипта  - один срабатывает каждые 30 минут и кладет трафик в файл, другой срабатывает в 23.55 и собирает статистику за день.

Это тот, что собирает трафик раз в 30 минут:

#!/bin/sh
#
# Этим скриптом выковыривается насчитанное количество трафика за 30 минут и кладется в папку daystat
# с именем HH-MM.txt
# затем сбрасываются счетчики.

# Забиваем переменные
IPTABLES="/sbin/iptables" # Путь до IPTABLES
HOUR=`date +%H` # Час
MINUTE=`date +%M` # Минута
DAYSTAT='/home/madkox/daystat' # Путь до папки с дневной статистикой

# Собираем дату вместе для получения имени файла
NUMTODAY=$HOUR-$MINUTE
# Задаем названия файлам
TRAF="$NUMTODAY-traf"
SECU="$NUMTODAY-https"

# Обнуляем переменные (если трафика нет вообще).
STAT=`expr 0`
HTTPS=`expr 0`
# Собираем трафик и обнуляем счетчики
STAT=`$IPTABLES -L -Z trafficcount -v -x | head -c 149 | tail -c 9`
HTTPS=`$IPTABLES -L -Z secured -v -x | head -c 144 | tail -c 9`

echo $STAT > $DAYSTAT/${TRAF}.txt
echo $HTTPS > $DAYSTAT/${SECU}.txt

exit 0

А этот - для запуска раз в день:

#!/bin/sh
#
# Забиваем переменные

MONTH=`date +%m` # Месяц
YEAR=`date +%y` # Год
MONTHSTAT='/home/madkox/monthstat' # Путь до папки с месячной статистикой
DAYSTAT='/home/madkox/daystat' # Путь до папки с дневной статистикой

# Собираем дату вместе для получения имени файла
NUMTODAY=$MONTH-$YEAR
# Создаем имена файлов
TRAF="$NUMTODAY-mtraf"
SECU="$NUMTODAY-mhttps"

# Идем в папку где у нас лежат файлы с месячной статистикой
cd $MONTHSTAT

# Проверяем, создавался ли уже в этом месяце файл с отчетом трафика.
if [ -e "$TRAF.txt" ]
 then
  File=$TRAF.txt
  {
  read line1
  } < $File
  TRAF_COUNTER="$line1" # если да - то устанавливаем счетчик равным вчерашнему числу.
 else
  TRAF_COUNTER=`expr 0` # если нет - то устанавливаем счетчик в ноль.
fi

# Проверяем, создавался ли уже в этом месяце файл с отчетом https.
if [ -e "$SECU.txt" ]
 then
  File=$SECU.txt
  {
  read line1
  } < $File
  HTTPS_COUNTER="$line1" # если да - то устанавливаем счетчик равным вчерашнему числу.
 else
  HTTPS_COUNTER=`expr 0` # если нет - то устанавливаем счетчик в ноль.
fi


# Идем в папку с дневной статистикой

cd $DAYSTAT

# циклом читаем дневные файлы и складываем их трафик
  for file in *traf.txt
   do
    {
    read line1
    } < $file
    TRAF_COUNTER=`expr $TRAF_COUNTER + $line1`
    rm -f $file
   done

  for file in *https.txt
   do
    {
    read line1
    } < $file
    HTTPS_COUNTER=`expr $HTTPS_COUNTER + $line1`
    rm -f $file
   done

# Далее перезаписываем файлы с месячной статистикой.

echo $TRAF_COUNTER > $MONTHSTAT/${TRAF}.txt
echo $HTTPS_COUNTER > $MONTHSTAT/${SECU}.txt


exit 0

Возможно где-то что-то можно было сделать и лучше и надежнее, но у меня получилось вот так.

Продолжение следует...
Homo homini admini est...

Оффлайн MadKox

  • Автор темы
  • Активист
  • *
  • Сообщений: 441
  • =)
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Вопрос по маршрутизации и биллингу.
« Ответ #10 : 16 Апрель 2008, 18:59:43 »
Продолжение.

Часть 2. DNS.

Для работы dns сначала использовал встроенный dns сервер squid, затем dnsmasq, но при интенсивной работе в разгар рабочего дня что-то начинало глючить (я так и не нашел, что именно) и тогда я решил использовать bind9. Нормально изучить к нему документацию мне не хватило времени, поэтому не скажу как и почему у меня все работает, могу только выложить конфиг.

named.conf

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local



acl mynetwork { 192.168.0.0/24; };

options {
    directory "/etc/namedb";           // Working directory
      allow-query { mynetwork; };
      forwarders {
195.210.XXX.YYY;
195.210.XXX.YYY;
        };
query-source address * port 53;
};

// include "/etc/bind/named.conf.options";

// prime the server with knowledge of the root servers
// zone "." {
// type hint;
// file "/etc/bind/db.root";
//};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

//zone "localhost" {
// type master;
// file "/etc/bind/db.local";
//};

zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};

//zone "0.in-addr.arpa" {
// type master;
// file "/etc/bind/db.0";
//};

//zone "255.in-addr.arpa" {
// type master;
// file "/etc/bind/db.255";
//};

// zone "com" { type delegation-only; };
// zone "net" { type delegation-only; };

// From the release notes:
//  Because many of our users are uncomfortable receiving undelegated answers
//  from root or top level domains, other than a few for whom that behaviour
//  has been trusted and expected for quite some length of time, we have now
//  introduced the "root-delegations-only" feature which applies delegation-only
//  logic to all top level domains, and to the root domain.  An exception list
//  should be specified, including "MUSEUM" and "DE", and any other top level
//  domains from whom undelegated responses are expected and trusted.
// root-delegation-only exclude { "DE"; "MUSEUM"; };

//include "/etc/bind/named.conf.local";

Homo homini admini est...

Оффлайн MadKox

  • Автор темы
  • Активист
  • *
  • Сообщений: 441
  • =)
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Вопрос по маршрутизации и биллингу.
« Ответ #11 : 16 Апрель 2008, 20:23:31 »
Часть 3. squid+squidguard+sams

Сначала я установил один сквид и настроил его на работу с IP авторизацией в прозрачном режиме. Заработал сразу.

Затем я установил SAMS  1.0.1 и попробовал его настроить с использованием встроенного редиректора.
На страничке автора программы http://sams.perm.ru/ есть подробное описание как и что делать.  Добавлю только, что у меня нормально собралась и заработала только версия 1.0.1.

При использовании встроенного редиректора sams при достаточно большой базе blacklist'ов весь самс начинал дико тормозить, а хотелось использовать большой блеклист например отсюда: http://urlblacklist.com. Поэтому я решил использовать squidGuard. Настроить совместную работу самса и сквидгарда у меня опять таки не получилось (что-то там странное с правами на конфиг файлы - то их самс забирает, то сквидгард - в общем меня время поджимало - копать не стал, но возможно у кого-то и получится их подружить). К этому моменту я уже был согласен на то, чтобы сквид работал со сквидгардом в режиме редиректора, а самс только считал трафик, однако оказалось, что если использовать самс вообще без редиректора - он все равно отслеживает превышение лимита трафика и блокирует пользователя на уровне squid.conf файла.

При настройке сквида и сквидгарда руководствовался статьями отсюда:
http://www.sys-adm.org.ua/www/squid-transparent.php
http://www.sys-adm.org.ua/www/squid-ncsa.php
http://www.sys-adm.org.ua/www/squidGuard.php

Плюс еще немного пошаманил с тегами squid.conf пытаясь читать описание тегов и понять что это такое и чего делает. В итоге, получил такой вот
squid.conf :
(Хочу заметить, что строчки в squid.conf в которых встречается слово sams  я не добавлял, это делает samsdaemon при настройке самса через веб-интерфейс. Закомментрованные строки - не изменялись, для сокращения размеров сообщения - удалил комментарии к тегам, но все теги оставил, даже если и не трогал их вообще).
# created by SAMS _sams_ 2008-4-14 12:18:14


# NETWORK OPTIONS
#  TAG: http_port
http_port 192.168.0.1:3128 transparent

#  TAG: icp_port
 icp_port 0

#  TAG: htcp_port
 htcp_port 0

#  TAG: mcast_groups
# none

#  TAG: udp_incoming_address
#  TAG: udp_outgoing_address
# udp_incoming_address 0.0.0.0
# udp_outgoing_address 255.255.255.255


# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
#  TAG: cache_peer
# none

#  TAG: cache_peer_domain
# none

#  TAG: neighbor_type_domain
# none

#  TAG: icp_query_timeout (msec)
# icp_query_timeout 0

#  TAG: maximum_icp_query_timeout (msec)
# maximum_icp_query_timeout 2000

#  TAG: mcast_icp_query_timeout (msec)
# mcast_icp_query_timeout 2000

#  TAG: dead_peer_timeout (seconds)
# dead_peer_timeout 10 seconds

#  TAG: hierarchy_stoplist
hierarchy_stoplist cgi-bin ?

#  TAG: cache
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

#  TAG: cache_vary
# cache_vary on

#  TAG: broken_vary_encoding
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache


# OPTIONS WHICH AFFECT THE CACHE SIZE
#  TAG: cache_mem (bytes)
# cache_mem 8 MB

#  TAG: cache_swap_low (percent, 0-100)
#  TAG: cache_swap_high (percent, 0-100)
# cache_swap_low 90
# cache_swap_high 95

#  TAG: maximum_object_size (bytes)
 maximum_object_size 4096 KB

#  TAG: minimum_object_size (bytes)
 minimum_object_size 0 KB

#  TAG: maximum_object_size_in_memory (bytes)
 maximum_object_size_in_memory 124 KB

#  TAG: ipcache_size (number of entries)
#  TAG: ipcache_low (percent)
#  TAG: ipcache_high (percent)
# ipcache_size 1024
# ipcache_low 90
# ipcache_high 95

#  TAG: fqdncache_size (number of entries)
# fqdncache_size 1024

#  TAG: cache_replacement_policy
 cache_replacement_policy lru

#  TAG: memory_replacement_policy
 memory_replacement_policy lru


# LOGFILE PATHNAMES AND CACHE DIRECTORIES
#  TAG: cache_dir
 cache_dir diskd /var/spool/squid 32768 16 256 Q1=72 Q2=64

#  TAG: logformat
# none

#  TAG: access_log
access_log /var/log/squid/access.log squid

#  TAG: cache_log
# cache_log /var/log/squid/cache.log

#  TAG: cache_store_log
# cache_store_log /var/log/squid/store.log

#  TAG: cache_swap_state
# none

#  TAG: emulate_httpd_log on|off
# emulate_httpd_log off

#  TAG: log_ip_on_direct on|off
# log_ip_on_direct on

#  TAG: mime_table
# mime_table /usr/share/squid/mime.conf

#  TAG: log_mime_hdrs on|off
# log_mime_hdrs off

#  TAG: useragent_log
# none

#  TAG: referer_log
# none

#  TAG: pid_filename
# pid_filename /var/run/squid.pid

#  TAG: debug_options
# debug_options ALL,1

#  TAG: log_fqdn on|off
# log_fqdn off

#  TAG: client_netmask
# client_netmask 255.255.255.255


# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS
# -----------------------------------------------------------------------------

#  TAG: ftp_user
# ftp_user Squid@

#  TAG: ftp_list_width
# ftp_list_width 32

#  TAG: ftp_passive
# ftp_passive on

#  TAG: ftp_sanitycheck
# ftp_sanitycheck on

#  TAG: ftp_telnet_protocol
# ftp_telnet_protocol on

#  TAG: check_hostnames
 check_hostnames on

#  TAG: allow_underscore
 allow_underscore on

#  TAG: cache_dns_program
# cache_dns_program /usr/lib/squid/dnsserver

#  TAG: dns_children
# dns_children 5

#  TAG: dns_retransmit_interval
# dns_retransmit_interval 5 seconds

#  TAG: dns_timeout
# dns_timeout 2 minutes

#  TAG: dns_defnames on|off
# dns_defnames off

#  TAG: dns_nameservers
 dns_nameservers 192.168.0.1

#  TAG: hosts_file
hosts_file /etc/hosts

#  TAG: diskd_program
 diskd_program /usr/lib/squid/diskd-daemon

#  TAG: unlinkd_program
# unlinkd_program /usr/lib/squid/unlinkd

#  TAG: pinger_program
# pinger_program /usr/lib/squid/pinger

#  TAG: url_rewrite_program
url_rewrite_program /usr/bin/squidGuard


#  TAG: url_rewrite_children
 url_rewrite_children 30

#  TAG: url_rewrite_concurrency
 url_rewrite_concurrency 0

#  TAG: url_rewrite_host_header
# url_rewrite_host_header on

#  TAG: url_rewrite_access
# none

#  TAG: location_rewrite_program
# none

#  TAG: location_rewrite_children
# location_rewrite_children 5

#  TAG: location_rewrite_concurrency
# location_rewrite_concurrency 0

#  TAG: location_rewrite_access
# none

#  TAG: auth_param
# none

#  TAG: authenticate_cache_garbage_interval
# authenticate_cache_garbage_interval 1 hour

#  TAG: authenticate_ttl
# authenticate_ttl 1 hour

#  TAG: authenticate_ip_ttl
# authenticate_ip_ttl 0 seconds

#  TAG: external_acl_type
# none


# OPTIONS FOR TUNING THE CACHE
# -----------------------------------------------------------------------------

#  TAG: wais_relay_host
#  TAG: wais_relay_port
# wais_relay_port 0

#  TAG: request_header_max_size (KB)
 request_header_max_size 24 KB

#  TAG: request_body_max_size (KB)
 request_body_max_size 0 KB

#  TAG: refresh_pattern
#Suggested default:
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
refresh_pattern -i ^http:          0       0%      0
refresh_pattern -i \/$          0       0%      0 reload-into-ims


#  TAG: quick_abort_min (KB)
#  TAG: quick_abort_max (KB)
#  TAG: quick_abort_pct (percent)
 quick_abort_min 16 KB
 quick_abort_max 16 KB
 quick_abort_pct 95

#  TAG: read_ahead_gap buffer-size
# read_ahead_gap 16 KB

#  TAG: negative_ttl time-units
 negative_ttl 5 minutes

#  TAG: positive_dns_ttl time-units
 positive_dns_ttl 12 hours

#  TAG: negative_dns_ttl time-units
 negative_dns_ttl 5 minute

#  TAG: range_offset_limit (bytes)
 range_offset_limit 0 KB

#  TAG: collapsed_forwarding (on|off)
 collapsed_forwarding off

#  TAG: refresh_stale_hit (time)
 refresh_stale_hit 30 seconds


# TIMEOUTS
# -----------------------------------------------------------------------------

#  TAG: forward_timeout time-units
 forward_timeout 2 minutes

#  TAG: connect_timeout time-units
 connect_timeout 1 minute

#  TAG: peer_connect_timeout time-units
# peer_connect_timeout 30 seconds

#  TAG: read_timeout time-units
# read_timeout 15 minutes

#  TAG: request_timeout
 request_timeout 1 minute

#  TAG: persistent_request_timeout
 persistent_request_timeout 1 minute

#  TAG: client_lifetime time-units
# client_lifetime 1 day

#  TAG: half_closed_clients
 half_closed_clients off

#  TAG: pconn_timeout
# pconn_timeout 120 seconds

#  TAG: ident_timeout
# ident_timeout 10 seconds

#  TAG: shutdown_lifetime time-units
 shutdown_lifetime 15 seconds


# ACCESS CONTROLS
# -----------------------------------------------------------------------------

#  TAG: acl
acl _sams_47efffc315441 src "/etc/squid/47efffc315441.sams"
acl _sams_47efffc315441_time time MTWHFAS 00:00-23:59
acl _sams_47efffe1a65e2 src "/etc/squid/47efffe1a65e2.sams"
acl _sams_47efffe1a65e2_time time MTWHFAS 00:00-23:59
acl _sams_47f0000f8285d src "/etc/squid/47f0000f8285d.sams"
acl _sams_47f0000f8285d_time time MTWHFAS 08:30-20:30
#
#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
acl mynetwork src 192.168.0.0/24

#  TAG: follow_x_forwarded_for
 follow_x_forwarded_for deny all

#  TAG: acl_uses_indirect_client on|off
 acl_uses_indirect_client off

#  TAG: delay_pool_uses_indirect_client on|off
 delay_pool_uses_indirect_client off

#  TAG: log_uses_indirect_client on|off
 log_uses_indirect_client off

#  TAG: http_access
http_access allow _sams_47efffc315441  _sams_47efffc315441_time 
http_access allow _sams_47efffe1a65e2  _sams_47efffe1a65e2_time 
http_access allow _sams_47f0000f8285d  _sams_47f0000f8285d_time 
#
#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
#
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
http_access deny to_localhost
#
# And finally deny all other access to this proxy
http_access deny all

#  TAG: http_access2
# none

#  TAG: http_reply_access
 http_reply_access allow all

#  TAG: icp_access
icp_access allow all

#  TAG: htcp_access
htcp_access deny all

#  TAG: htcp_clr_access
 htcp_clr_access deny all

#  TAG: miss_access
miss_access allow mynetwork

#  TAG: cache_peer_access
# none

#  TAG: ident_lookup_access
 ident_lookup_access deny all

#  TAG: tcp_outgoing_tos
# none

#  TAG: tcp_outgoing_address
# none

#  TAG: reply_header_max_size (KB)
 reply_header_max_size 24 KB

#  TAG: reply_body_max_size bytes allow|deny acl acl...
 reply_body_max_size 0 allow all

#  TAG: log_access allow|deny acl acl...
# none


# ADMINISTRATIVE PARAMETERS
# -----------------------------------------------------------------------------

#  TAG: cache_mgr
 cache_mgr MadKox

#  TAG: mail_from
# none

#  TAG: mail_program
# mail_program mail

#  TAG: cache_effective_user
# cache_effective_user root

#  TAG: cache_effective_group
# none

#  TAG: httpd_suppress_version_string on|off
 httpd_suppress_version_string on

#  TAG: visible_hostname
visible_hostname GW

#  TAG: unique_hostname
# none

#  TAG: hostname_aliases
# none

#  TAG: umask
# umask 027


# OPTIONS FOR THE CACHE REGISTRATION SERVICE
# -----------------------------------------------------------------------------
#  TAG: announce_period
# announce_period 0

#  TAG: announce_host
#  TAG: announce_file
#  TAG: announce_port
# announce_host tracker.ircache.net
# announce_port 3131


# HTTPD-ACCELERATOR OPTIONS

#  TAG: httpd_accel_no_pmtu_disc on|off
# httpd_accel_no_pmtu_disc off


# DELAY POOL PARAMETERS

#  TAG: delay_pools
# delay_pools 0

#  TAG: delay_class
# none

#  TAG: delay_access
# none

#  TAG: delay_parameters
# none

#  TAG: delay_initial_bucket_level (percent, 0-100)
# delay_initial_bucket_level 50


# WCCPv1 AND WCCPv2 CONFIGURATION OPTIONS
# -----------------------------------------------------------------------------

#  TAG: wccp_router
#  TAG: wccp2_router
# wccp_router 0.0.0.0

#  TAG: wccp_version
# wccp_version 4

#  TAG: wccp2_rebuild_wait
# wccp2_rebuild_wait on

#  TAG: wccp2_forwarding_method
# wccp2_forwarding_method 1

#  TAG: wccp2_return_method
# wccp2_return_method 1

#  TAG: wccp2_assignment_method
# wccp2_assignment_method 1

#  TAG: wccp2_service
# wccp2_service standard 0

#  TAG: wccp2_service_info
# none

#  TAG: wccp2_weight
# wccp2_weight 10000

#  TAG: wccp_address
#  TAG: wccp2_address
# wccp_address 0.0.0.0
# wccp2_address 0.0.0.0


# PERSISTENT CONNECTION HANDLING
# -----------------------------------------------------------------------------
#  TAG: client_persistent_connections
#  TAG: server_persistent_connections
# client_persistent_connections on
# server_persistent_connections on

#  TAG: persistent_connection_after_error
# persistent_connection_after_error off

#  TAG: detect_broken_pconn
# detect_broken_pconn off


# CACHE DIGEST OPTIONS
# -----------------------------------------------------------------------------

#  TAG: digest_generation
# digest_generation on

#  TAG: digest_bits_per_entry
# digest_bits_per_entry 5

#  TAG: digest_rebuild_period (seconds)
# digest_rebuild_period 1 hour

#  TAG: digest_rewrite_period (seconds)
# digest_rewrite_period 1 hour

#  TAG: digest_swapout_chunk_size (bytes)
# digest_swapout_chunk_size 4096 bytes

#  TAG: digest_rebuild_chunk_percentage (percent, 0-100)
# digest_rebuild_chunk_percentage 10


# MISCELLANEOUS
# -----------------------------------------------------------------------------

#  TAG: dns_testnames
# dns_testnames netscape.com internic.net nlanr.net microsoft.com

#  TAG: logfile_rotate
# logfile_rotate 0

#  TAG: append_domain
# none

#  TAG: tcp_recv_bufsize (bytes)
# tcp_recv_bufsize 0 bytes

#  TAG: error_map
# none

#  TAG: err_html_text
# none

#  TAG: deny_info
# none

#  TAG: memory_pools on|off
# memory_pools on

#  TAG: memory_pools_limit (bytes)
# memory_pools_limit 5 MB

#  TAG: via on|off
# via on

#  TAG: forwarded_for on|off
# forwarded_for on

#  TAG: log_icp_queries on|off
# log_icp_queries on

#  TAG: icp_hit_stale on|off
# icp_hit_stale off

#  TAG: minimum_direct_hops
# minimum_direct_hops 4

#  TAG: minimum_direct_rtt
# minimum_direct_rtt 400

#  TAG: cachemgr_passwd
# none

#  TAG: store_avg_object_size (kbytes)
# store_avg_object_size 13 KB

#  TAG: store_objects_per_bucket
# store_objects_per_bucket 20

#  TAG: client_db on|off
# client_db on

#  TAG: netdb_low
#  TAG: netdb_high
# netdb_low 900
# netdb_high 1000

#  TAG: netdb_ping_period
# netdb_ping_period 5 minutes

#  TAG: query_icmp on|off
# query_icmp off

#  TAG: test_reachability on|off
# test_reachability off

#  TAG: buffered_logs on|off
# buffered_logs off

#  TAG: reload_into_ims on|off
# reload_into_ims off

#  TAG: always_direct
# none

#  TAG: never_direct
# none

#  TAG: header_access
# none

#  TAG: header_replace
# none

#  TAG: icon_directory
# icon_directory /usr/share/squid/icons

#  TAG: global_internal_static
# global_internal_static on

#  TAG: short_icon_urls
# short_icon_urls off

#  TAG: error_directory
# error_directory /usr/share/squid/errors/English

#  TAG: maximum_single_addr_tries
# maximum_single_addr_tries 1

#  TAG: retry_on_error
# retry_on_error off

#  TAG: snmp_port
# snmp_port 0

#  TAG: snmp_access
# snmp_access deny all

#  TAG: snmp_incoming_address
#  TAG: snmp_outgoing_address
# snmp_incoming_address 0.0.0.0
# snmp_outgoing_address 255.255.255.255

#  TAG: as_whois_server
# as_whois_server whois.ra.net
# as_whois_server whois.ra.net

#  TAG: incoming_icp_average
#  TAG: incoming_http_average
#  TAG: incoming_dns_average
#  TAG: min_icp_poll_cnt
#  TAG: min_dns_poll_cnt
#  TAG: min_http_poll_cnt
# incoming_icp_average 6
# incoming_http_average 4
# incoming_dns_average 4
# min_icp_poll_cnt 8
# min_dns_poll_cnt 8
# min_http_poll_cnt 8

#  TAG: max_open_disk_fds
# max_open_disk_fds 0

#  TAG: offline_mode
# offline_mode off

#  TAG: uri_whitespace
# uri_whitespace strip

#  TAG: broken_posts
# none

#  TAG: mcast_miss_addr
# mcast_miss_addr 255.255.255.255

#  TAG: mcast_miss_ttl
# mcast_miss_ttl 16

#  TAG: mcast_miss_port
# mcast_miss_port 3135

#  TAG: mcast_miss_encode_key
# mcast_miss_encode_key XXXXXXXXXXXXXXXX

#  TAG: nonhierarchical_direct
# nonhierarchical_direct on

#  TAG: prefer_direct
# prefer_direct off

#  TAG: strip_query_terms
# strip_query_terms on

#  TAG: coredump_dir
coredump_dir /var/spool/squid

#  TAG: redirector_bypass
 redirector_bypass off

#  TAG: ignore_unknown_nameservers
 ignore_unknown_nameservers on

#  TAG: chroot
# none

#  TAG: balance_on_multiple_ip
# balance_on_multiple_ip on

#  TAG: pipeline_prefetch
# pipeline_prefetch off

#  TAG: extension_methods
extension_methods REPORT MERGE MKACTIVITY CHECKOUT

#  TAG: request_entities
# request_entities off

#  TAG: high_response_time_warning (msec)
# high_response_time_warning 0

#  TAG: high_page_fault_warning
# high_page_fault_warning 0

#  TAG: high_memory_warning
# high_memory_warning 0

#  TAG: store_dir_select_algorithm
# store_dir_select_algorithm least-load

#  TAG: forward_log
# none

#  TAG: ie_refresh on|off
# ie_refresh off

#  TAG: vary_ignore_expire on|off
# vary_ignore_expire off

#  TAG: sleep_after_fork (microseconds)
# sleep_after_fork 0

#  TAG: minimum_expiry_time (seconds)
# minimum_expiry_time 60 seconds

#  TAG: relaxed_header_parser on|off|warn
# relaxed_header_parser on


« Последнее редактирование: 18 Декабрь 2008, 16:39:22 от MadKox »
Homo homini admini est...

Оффлайн MadKox

  • Автор темы
  • Активист
  • *
  • Сообщений: 441
  • =)
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Вопрос по маршрутизации и биллингу.
« Ответ #12 : 16 Апрель 2008, 20:44:12 »
Продолжение:

squidGuard настроил на работу с блеклистом отсюда (~14Мб).

В принципе - настройка сквидгарда дело не сложное, но муторное - необходимо описать каждую группу блокировки. Для сокращения работы я сразу отбросил часть групп (типа whitelist) и прописал только "плохие" сайты. Вот мой squidGuard.conf:

#
# CONFIG FILE FOR SQUIDGUARD
#

dbhome /var/lib/squidguard/db
logdir /var/log/squid

#
# TIME RULES:
# abbrev for weekdays:
# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat



#
# REWRITE RULES:
#

#
# SOURCE ADDRESSES:
#

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


# Продвинутые пользователи, которым можно дать доступ к бОльшему количеству ресурсов.
src premium {
ip 192.168.0.5
# ip 192.168.0......
ip 192.168.0.15
}

# Просто пользователи.
src users {
ip 192.168.0.16
# ip 192.168.0......
ip 192.168.0.150
}



#
# DESTINATION CLASSES:
#

# Тут описываются классы интернет-ресурсов из черного списка.

dest good {
domainlist good/domains
redirect http://192.168.0.3/html/SGredirect/good.html
}

dest local {
domainlist local/domains
redirect http://192.168.0.3/html/SGredirect/local.html
}


dest ads {
domainlist ads/domains
urllist ads/urls
expressionlist ads/expressions
redirect http://192.168.0.3/html/SGredirect/ads.html
}

dest porn {
domainlist porn/domains
urllist porn/urls
expressionlist porn/expressions
redirect http://192.168.0.3/html/SGredirect/porn.html
}

dest adult {
domainlist adult/domains
urllist adult/urls
redirect http://192.168.0.3/html/SGredirect/adult.html
}

dest antispyware {
domainlist antispyware/domains
urllist antispyware/urls
redirect http://192.168.0.3/html/SGredirect/antispyware.html
}

dest artnudes {
domainlist artnudes/domains
urllist artnudes/urls
redirect http://192.168.0.3/html/SGredirect/artnudes.html
}

dest audio-video {
domainlist audio-video/domains
urllist audio-video/urls
redirect http://192.168.0.3/html/SGredirect/audio-video.html
}

dest  blog {
domainlist blog/domains
urllist blog/urls
redirect http://192.168.0.3/html/SGredirect/blog.html
}

dest cellphones {
domainlist cellphones/domains
redirect http://192.168.0.3/html/SGredirect/cellphones.html
}

dest chat {
domainlist chat/domains
urllist chat/urls
redirect http://192.168.0.3/html/SGredirect/chat.html
}

dest dating {
domainlist dating/domains
urllist dating/urls
redirect http://192.168.0.3/html/SGredirect/dating.html
}

dest desktopsillies {
domainlist desktopsillies/domains
urllist desktopsillies/urls
redirect http://192.168.0.3/html/SGredirect/desktopsillies.html
}

dest dialers {
domainlist dialers/domains
urllist dialers/urls
redirect http://192.168.0.3/html/SGredirect/dialers.html
}

dest ecommerce {
domainlist ecommerce/domains
urllist ecommerce/urls
redirect http://192.168.0.3/html/SGredirect/ecommerce.html
}

dest entertainment {
domainlist entertainment/domains
urllist entertainment/urls
redirect http://192.168.0.3/html/SGredirect/entertainment.html
}

dest filehosting {
domainlist filehosting/domains
redirect http://192.168.0.3/html/SGredirect/filehosting.html
}

dest gambling {
domainlist gambling/domains
urllist gambling/urls
redirect http://192.168.0.3/html/SGredirect/gambling.html
}

dest games {
domainlist games/domains
urllist games/urls
redirect http://192.168.0.3/html/SGredirect/games.html
}

dest hacking {
domainlist hacking/domains
urllist hacking/urls
redirect http://192.168.0.3/html/SGredirect/hacking.html
}

dest jobsearch {
domainlist jobsearch/domains
urllist jobsearch/urls
redirect http://192.168.0.3/html/SGredirect/jobsearch.html
}

dest mixed_adult {
domainlist mixed_adult/domains
redirect http://192.168.0.3/html/SGredirect/mixed_adult.html
}

dest naturism {
domainlist naturism/domains
urllist naturism/urls
redirect http://192.168.0.3/html/SGredirect/naturism.html
}

dest onlinegames {
domainlist onlinegames/domains
urllist onlinegames/urls
redirect http://192.168.0.3/html/SGredirect/onlinegames.html
}

dest phishing {
domainlist phishing/domains
urllist phishing/urls
redirect http://192.168.0.3/html/SGredirect/phishing.html
}

dest proxy {
domainlist proxy/domains
expressionlist proxy/expressions
urllist proxy/urls
redirect http://192.168.0.3/html/SGredirect/proxy.html
}

dest radio {
domainlist radio/domains
urllist radio/urls
redirect http://192.168.0.3/html/SGredirect/radio.html
}

dest ringtones {
domainlist ringtones/domains
redirect http://192.168.0.3/html/SGredirect/ringtones.html
}

dest sexuality {
domainlist sexuality/domains
urllist sexuality/urls
redirect http://192.168.0.3/html/SGredirect/sexuality.html
}

dest socialnetworking {
domainlist socialnetworking/domains
urllist socialnetworking/urls
redirect http://192.168.0.3/html/SGredirect/socialnetworking.html
}

dest spyware {
domainlist spyware/domains
redirect http://192.168.0.3/html/SGredirect/spyware.html
}

dest updatesites {
domainlist updatesites/domains
urllist updatesites/urls
redirect http://192.168.0.3/html/SGredirect/updatesites.html
}

dest virusinfected {
domainlist virusinfected/domains
urllist virusinfected/urls
redirect http://192.168.0.3/html/SGredirect/virusinfected.html
}

dest warez {
domainlist warez/domains
urllist warez/urls
redirect http://192.168.0.3/html/SGredirect/warez.html
}


# А тут собственно раздается доступ к тем или иным ресурсам в соответсвие с группами пользователей, заданных выше.
# !in-addr - запрещает пользоваться непосредственно IP адресом для доступа к ресурсу.

acl {

premium  {
pass !in-addr !porn !adult !dating !mixed_adult !phishing !proxy !spyware !updatesites !virusinfected any
}

users {
pass !in-addr !ads !porn !adult !blog !dating !gambling !hacking !mixed_adult !phishing !proxy !sexuality !socialnetworking !spyware !updatesites !virusinfected !antispyware !audio-video !chat !games !jobsearch !cellphones !desktopsillies !entertainment !filehosting !onlinegames !radio !ringtones !warez any
}

default {
pass good
redirect http://192.168.0.3/html/SGredirect/default.html
}
}

О том как настраивать сквидгард и сквид я читал тут. (я давал уже эту ссылку в предыдущем посте).

Ну и на последок выкладываю sams.conf, хотя там и настраивать-то нечего...
[client]
SQUID_DB=squidlog
SAMS_DB=squidctrl
MYSQLHOSTNAME=localhost
MYSQLUSER=sams
MYSQLPASSWORD=********
MYSQLVERSION=4.0
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/etc/squid
SQUIDLOGDIR=/var/log/squid
SQUIDCACHEDIR=/var/spool/squid
SAMSPATH=/usr/local
SQUIDPATH=/usr/sbin
SQUIDGUARDLOGPATH=/var/log/squid
SQUIDGUARDDBPATH=/var/lib/squidguard/db
RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout
LDAPSERVER=servername_or_ipadress
LDAPBASEDN=your.domain
LDAPUSER=DomainAdministrator
LDAPUSERPASSWD=passwd
LDAPUSERSGROUP=Users
REJIKPATH=/usr/local/rejik
SHUTDOWNCOMMAND=shutdown -h now
CACHENUM=0

В заключение хотел сказать, что это все - то что получилось сделать у меня и это работает. Однако, не сомневаюсь, мой конфиг наверняка содержит немало ошибок. Если что - сильно не пинайте :)
Homo homini admini est...

Оффлайн polyak

  • Активист
  • *
  • Сообщений: 288
  • 726f6f745f75
    • Просмотр профиля
Re: Вопрос по маршрутизации и биллингу.
« Ответ #13 : 16 Апрель 2008, 20:49:12 »
зачот!
топег в хату!
726f6f745f75

Оффлайн MadKox

  • Автор темы
  • Активист
  • *
  • Сообщений: 441
  • =)
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Вопрос по маршрутизации и биллингу.
« Ответ #14 : 16 Апрель 2008, 21:36:33 »
Хотел добавить:
Система работает с 1 апреля.  За это время накопилась небольшая статистика по использованию.

Итак - до Ubuntu в качестве шлюза выступала машинка с 2000-й вендой (Advanced Server) в связке с WinRoute и TMeter. Работало все это вроде стабильно, однако, если не ребутать машинку раз в сутки - рано или поздно что-то одно да отваливалось.
Так сложилось, что офисное помещение у нас находится в здании, хозяева которого прогнали всех интернет-провайдеров и сами стали раздавать инет. Естественно - по немыслимым ценам. При этом - максимальный тариф предоплаченного трафика - 10Гб. В итоге, нарабатывая где-то около 25Гб ежемесячно нам приходилось платить не только абонентскую плату, но и оплату превышения (раза в 3 больше по сравнению с абоненткой). Одно дело - если все эти 25 гигов нам нужны по работе, однако выборочное наблюдение установило, что около 60% трафика - это всякие развлекательные ресурсы, интернет-радио и т.д.
Различные лимиты трафика помогали мало, т.к. отключенный от инета юзер шел к начальству и говорил, что инет ему нужен для работы и т.д. - в итоге на следующий день инет ему снова включался...
Встал вопрос о снижении трафика путем его фильтрации. Заодно я подумал о прокси, а учитывая, что в планах пересадить всю фирму на linux - я решил делать новый шлюз на Ubuntu.

Для сравнения - общий трафик на 16 марта 08 года составил 11Гб (с копейками).
Общий трафик на 16 апреля 08 года - 6Гб (тоже с копейкми) - разница заметна невооруженным взглядом  :)

При этом, за это время из кеша сквид отдал без малого 2 гига.

Конечно, не обошлось без проблем с пользователями, т.к. просеять весь блеклист невозможно и некоторые вполне безобидные сайты туда попали.
Для этого я завел текстовый файл на сетевой шаре и народ стал отписывать мне туда куда их не пускает и какой фильтр срабатывает. После предварительного просмотра (ну а вдруг обманывают :) ) я удаляю эти сайты из блеклиста и все становится ок.

Конечно остались некоторые дыры - например, абсолютно нефильтруемый https или веб-прокси (при всем богатстве фильтра инет-прокси - все таки может найтись неотблеклищенный), да и в конце концов мак тоже можно подставить, однако эти моменты были решены в административном порядке (типа если поймаю кого, пользующегося прокси - на него налагается немаленький штраф).

А в остальном - инет стал работать стабильнее, быстрее. Ненужного трафика стало гораздо меньше. Безопасность опять-же повысилась...
Homo homini admini est...

 

Страница сгенерирована за 0.066 секунд. Запросов: 23.