Stargazer
ПРИМЕР НАСТРОЙКИ СЕРВЕРА ПОД LINUX

Если у вас вызывает сложности понимание iptables, то по ссылке, указанной ниже, находится прекрасная документация по iptables на русском языке:
iptables tutorial (opennet.ru)
iptables tutorial (gazette.lrn.ru)
iptables tutorial в архиве bz2

Дано:

Имеется пользовательская сеть, один сегмент, 192.168.1.0/24. Роутер с установленным stargazer-ом. Сервер имеет связь с внешним миром и сервером, на котором находится музыкальный и видео архивы.

Серврер имеет три сетевых интерфейса:

  • eth0, 192.168.1.1/24, к нему подключены клиенты
  • eth1, 10.3.2.111/24, через него происходит выход во внешний мир. На этом же интерфейсе производится маскарадинг
  • eth2, 172.18.1.1/24, к нему подключен архив с музыкой и фильмами
Ниже дана схема этого сервера:

Городские ресурсы состоят из 4-х подсетей:

  • 195.248.160.0/19
  • 212.86.224.0/19
  • 213.227.192.0/18
  • 217.24.160.0/20

Требуется:

Необходимо настроить сервер таким образом:

  1. Организовать подсчет локального трафика
  2. Организовать подсчет городского трафика
  3. Организовать подсчет мирового(прочего) трафика
  4. Настроить доступ пользователям так, что бы они не авторизовавшись не могли попасть в интернет, внутренние ресурсы, также, должны быть недоступны
  5. Пользователи всегда, независимо от того, авторизованы они или нет, могли пинговать сервер (для нужд диагностики)
  6. С клиентской машины с адресом 192.168.1.18 настроить доступ по ssh на сервер при отсутствии авторизатции. Это домашняя машина админа и ему бывает нужно что-то сделать на сервере не имея авторизации
  7. В офисе расположена машина с адресом 192.168.1.2, настроить для нее доступ по ssh на сервер при отсутствии авторизатции.
  8. Доступ конфигуратором сделать возможным только с хостов 192.168.1.2 и 192.168.1.18
Решение:

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

Будем считать, что:

  • направлекние №0 - локальный трафик (DIR0)
  • направлекние №1 - городской трафик (DIR1)
  • направлекние №2 - мировой трафик (DIR2)
rules

Файл /etc/stargazer/rules:

# Самые скоростные ресурсы распологаем в самом верху наших правил
# Это позволит уменьшить нагрузку на процессор
# Самыми быстрыми ресурсами, в данном случае, будут архивы видео и музыки
#ПРОТОКОЛ АДРЕС НАПРАВЛЕНИЕ
# Трафик на архив
ALL 172.18.1.0/24 DIR0
# Трафик на роутер
ALL 192.168.1.1 DIR0
ALL 10.3.2.111 DIR0
ALL 172.18.1.1 DIR0
# Город
ALL 195.248.160.0/19 DIR1
ALL 212.86.224.0/19 DIR1
ALL 213.227.192.0/18 DIR1
ALL 217.24.160.0/20 DIR1
# Пинги не считаем
ICMP 0.0.0.0/0 NULL
# Мир, те всё что не попало под предыдущие правила
ALL 0.0.0.0/0 DIR3

Настройка фаервола

Назовем этот фвйл fw, сделаем его исполняемым и разместим в директории /etc/stargazer

#!/bin/bash

#Машина в офисе
office=192.168.1.2

#Машина администратора
admin=192.168.1.18

#Адреса роутера
server0=192.168.1.1
server1=10.3.2.111
server2=172.18.1.1

# Адрес файлового архива с mp3 и video
video_serv=172.18.1.2

# Интерфейс смотрящий на клиентов
iface_cli=eth0

# Интерфейс смотрящий во внешний мир
iface_world=eth1

# Интерфейс смотрящий на архив
iface_int=eth2

#Порты, на которых работает конфигуратор и авторизатор
conf_port=4444
user_port1=4444
# Разрешаем форвардинг пакетов между интерфейсами
# Эта штука необязательна, просто в некоторых дистрибутивах
# по умолчанию форвардинг разрешен, а в некоторых - запрещен
# Если мы подстрахуемся, хуже не бкдет
echo "1" > /proc/sys/net/ipv4/ip_forward

# Очищаем правила файрвола
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X

# Политика по умолчанию DROP: всем всё запрещено
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Разрешаем пингам ходить всюду и всегда
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A FORWARD -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# Разрешаем всё на локальном интерфейсе
iptables -t filter -A INPUT -d 127.0.0.1 -j ACCEPT
iptables -t filter -A OUTPUT -s 127.0.0.1 -j ACCEPT

# Разрешить серверу общаться со внешним миром
iptables -t filter -A INPUT -i $iface_world -j ACCEPT
iptables -t filter -A OUTPUT -o $iface_world -j ACCEPT

# Разрешить видео-серверу обращаться во внешним миром и роутером
iptables -t filter -A INPUT -s $video_serv -j ACCEPT
iptables -t filter -A FORWARD -s $video_serv -j ACCEPT
iptables -t filter -A FORWARD -d $video_serv -j ACCEPT
iptables -t filter -A OUTPUT -d $video_serv -j ACCEPT

# DNS. Замечу, ДНС работает и по TCP и по UDP
iptables -t filter -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p udp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

# SSH
iptables -t filter -A INPUT -p tcp -s $office -d $server0 --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d $office -s $server0 --sport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp -s $admin -d $server0 --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d $admin -s $server0 --sport 22 -j ACCEPT

# Stargazer configurator
iptables -t filter -A INPUT -p tcp -s 192.168.1.0/24 -d $server0 --dport $conf_port -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d 192.168.1.0/24 -s $server0 --sport $conf_port -j ACCEPT

# UDP stargazer InetAccess
iptables -t filter -A INPUT -p udp -s 192.168.1.0/24 --sport $user_port1 -d $server0 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -d 192.168.1.0/24 --dport $user_port1 -s $server0 -j ACCEPT

#Маскарад
iptables -t nat -A POSTROUTING -d 0.0.0.0/0 -j MASQUERADE

OnConnect

#!/bin/bash

ip=$2

iptables -t filter -A INPUT -s $ip -j ACCEPT
iptables -t filter -A FORWARD -s $ip -j ACCEPT
iptables -t filter -A FORWARD -d $ip -j ACCEPT
iptables -t filter -A OUTPUT -d $ip -j ACCEPT

OnDisconnect

#!/bin/bash

ip=$2

iptables -t filter -D INPUT -s $ip -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D INPUT -s $ip -j ACCEPT
done

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

iptables -t filter -D FORWARD -s $ip -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D FORWARD -s $ip -j ACCEPT
done

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

iptables -t filter -D FORWARD -d $ip -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D FORWARD -d $ip -j ACCEPT
done

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

iptables -t filter -D OUTPUT -d $ip -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D OUTPUT -d $ip -j ACCEPT
done

stargazer.conf

# Файл настроек сервера stargazer

# Имя файла в котором определяются правила подсчета трафика
rules=/etc/stargazer/rules

# Рабочая директория сервере, тут содержатся данный о тарифах, изерах и админах
WorkDir=/var/stargazer/

# Имя лог файла куда пушутся события
LogFile=/var/log/stargazer.log

# Если юзер в течение UserTimeout секунд не подает признаков жизни, сервер отключит его
# (естественно, если клиент был подключен до этого)
UserTimeout=60

# Время через которое сервер повторяет проверку того, жив ли клиент. Также это время
# через которое у клиента обновляется его статитстика. UserDelay должно быть в
# 3...10 раз меньше чем UserTimeout
UserDelay=10

# Эта опция действительна только для сервера работающего со вторым типом тарифных планов
# Она определяет что будет передаватся программе InetAccess от сервера
# FreeMb = 0 - кол-во бесплатных мегабайт в пресчете на цену нулевого направления
# FreeMb = 1 - кол-во бесплатных мегабайт в пресчете на цену первого направления
# FreeMb = 2 - кол-во бесплатных мегабайт в пресчете на цену второго направления
# ........................
# FreeMb = 9 - кол-во бесплатных мегабайт в пресчете на цену девятого направления
# FreeMb = cash - кол-во денег на которые юзер может бесплатно качать
# FreeMb = none - ничего не передавать
FreeMb=2

# Время через которое пишется детальная статистика
# возможные значения 3, 2, 1, 1/2, 1/4, 1/6
# 3 - раз в три часа, 1 - раз в чаc, 1/2 - раз в пол часа, 1/6 - раз в 10 мин
StatTime=1/6

# Номер порта по которому сервер слушает обращения конфигуратора
adminPort=4444

# Номер порта по которому сервер ожидает обращения авторизатора
userPort=4444

# Максимальное кол-во юзеров. Эта величина влияет на кол-во памяти необходимой серверу
MaxUsers=100

# Опция определяющая менять ли местами upload и download
TurnTraff=no

# День снятия абонплаты
DayFee=1

# День, в который происходит обнуление счетчиков трафика, и
# перехода на новый тариф
DayResetTraff=1

# Имена направлений. Пустые имена не будут отображаться
# ни в авторизаторе, ни в конфигураторе
DirName0=Локаль
DirName1=Город
DirName2=Мир
DirName3=
DirName4=
DirName5=
DirName6=
DirName7=
DirName8=
DirName9=

# "Разамазанное" снятие абонплаты. Каждый день
# 1/30 (1/31, 12/28) часть абонплаты
SpreadFee=no

# Владелец, группа и права доступа на файлы
# статистики у пользователей
StatOwner=root
StatGroup=stg_stat
StatMode=640

# Владелец, группа и права доступа на файлы
# конфигурации у пользователей
ConfOwner=root
ConfGroup=root
ConfMode=640

# Владелец, группа и права доступа на логи
# у пользователей
UserLogOwner=root
UserLogGroup=root
UserLogMode=640

# Разрешение на доступ конфигуратором
AdminOrder=allow,deny
AdminAllowFrom=192.168.1.1 192.168.1.2 192.168.1.81
AdminDenyFrom=all

# Разрешение на доступ авторизатором
UserOrder=allow,deny
UserAllowFrom=192.168.1.0/24
UserDenyFrom=all

# Запрет на слишком частые обращения на порт авторизатора
FloodControl=yes

Теперь остается поместить в /etc/rc.d/rc.local две строки (порядок строк важен!):
/etc/stargazer/fw
/sbin/stargazer
и можно считать, что настройка закончена.
СОДЕРЖАНИЕ