версия 2.014.7.6
файл fw:
#!/bin/bash
#Машина в офисе
#office=192.168.1.2
#Машина администратора
admin=192.168.1.80
#Адреса роутера
server0=192.168.1.244 (через этот интерфейс соединяюсь с роутером подсети 192.168.1.0 для выхода в инет)
server1=192.168.10.1(через этот подключаю к нету подсеть 192.168.10.0)
#server2=172.18.1.1
# Адрес файлового архива с mp3 и video
#video_serv=172.18.1.2
# Интерфейс смотрящий на клиентов
iface_cli=eth1
# Интерфейс смотрящий во внешний мир
iface_world=eth0
# Интерфейс смотрящий на архив
#iface_int=etheth2
#Порты, на которых работает конфигуратор и авторизатор
conf_port=5555
user_port1=5555
user_port2=5555
# Разрешаем форвардинг пакетов между интерфейсами
# Эта штука необязательна, просто в некоторых дистрибутивах
# по умолчанию форвардинг разрешен, а в некоторых - запрещен
# Если мы подстрахуемся, хуже не бкдет
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
iptables -t filter -A INPUT -p tcp -s $admin -d $server0 --dport 5555 -j ACCEPT
iptables -t filter -A INPUT -p tcp -s $admin -d $server0 --dport 10000 -j ACCEPT
# Stargazer configurator
iptables -t filter -A INPUT -p tcp -s 192.168.10.0/24 -d $server1 --dport $conf_port -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d 192.168.10.0/24 -s $server1 --sport $conf_port -j ACCEPT
# UDP stargazer InetAccess
iptables -t filter -A INPUT -p udp -s 192.168.10.0/24 -d $server1 --dport $user_port1 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -d 192.168.10.0/24 --dport $user_port1 -s $server1 -j ACCEPT
#Маскарад
iptables -t nat -A POSTROUTING -d 0.0.0.0/0 -j MASQUERADE
onConnect:
#!/bin/bash
# Login
LOGIN=$1
#user IP
IP=$2
#cash
CASH=$3
#user ID
ID=$4
echo "Yes `date +%Y.%m.%d-%H.%M.%S` $IP $CASH $ID" >> /var/stargazer/users/$LOGIN/connect.log
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
# Login
LOGIN=$1
#user IP
IP=$2
#cash
CASH=$3
#user ID
ID=$4
echo "No `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /var/stargazer/users/$LOGIN/connect.log
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
-----------------------------------
rules:
ALL 192.168.10.0/24 DIR0
ALL 0.0.0.0/0 DIR1
----------------------------------
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=5555
# Номер порта по которому сервер ожидает обращения авторизатора
userPort=5555
# Максимальное кол-во юзеров. Эта величина влияет на кол-во памяти необходимой серверу
MaxUsers=100
# for FreeBSD only
# Имя интерфейсов на которых нужно вести подсчет трафика
# iface=ed0,ed1,rl0
# Опция определяющая менять ли местами upload и download
TurnTraff=no
# День снятия абонплаты
DayFee=1
# День, в который происходит обнуление счетчиков трафика
DayResetTraff=1
# Имена направлений. Пустые имена не будут отображаться
# ни в авторизаторе, ни в конфигураторе
DirName0=Local
DirName1=World
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.80
# Разрешение на доступ авторизатором
UserOrder=allow,deny
UserAllowFrom=192.168.10.0/24
# Запрет на слишком частые обращения на порт авторизатора
FloodControl=yes