Биллинг на FreeBSD (mpd5 VPN, abills)

abills0  Техническое задание

  1. VPN-сервер в качестве интернет-шлюза, не требующий установки дополнительного ПО для Windows-клиентов.
  2. Подсчет трафика, журналирование посещенных адресов.
  3. Выборочное блокирование определенных адресов, портов. Редирект на локальную страницу по нарушении доступа или истечении трафика.
  4. Опционально – шейпер.

при установке FreeBSD 8.0:
/ 1024
swap 302
/var 1024-5000
/tmp 730
/usr 12000-~
– включил доступ по SSH;
– font – IBM 866;
– keymap – Russia KOI8-R
– saver:-Daemon;
– screenmap – KOI8-R to IBM 866;
– ttys -KOI8-R;
– IP-адрес – 192.168.11.222.
Распакуем порты с DVD-диска: # sysinstall
здесь “Configure” > “Distributions” > “Ports” > “Ok”.
Затем таким же образом ставим MySQL (на DVD – релиз mysql-server-5) и добавляем строчку mysql_enable=”YES” в /etc/rc.conf
Далее, чтобы постоянно загружались модулем ipfw_nat.ko и ng_car.ko в /boot/loader.conf добавляем:

(accf_http понадобится в будущем для Апача)
Установим из портов abills – версия 0.41 уже поддерживает mpd5 (по зависимостям установятся perl и freeradius – отмечайте опцию MY_SQL):
# cd /usr/ports/net/abills
# make install clean

Создаем пользователя для абиллса:
# mysql -u root -p

развернуть

[collapse]

и загружаем таблицы в базу:
# mysql -D abills < /usr/local/abills/abills.sql
Изменяем строки в /usr/local/abills/libexec/config.pl:
(нажмите, чтобы развернуть)

[collapse]

И добавляем строку

Вносим в cron периодические процессы /etc/crontab

При установке mpd5 не забываем поставить галочку на NG_CAR
# cd /usr/ports/net/mpd5
# make install clean

После установки:
# cd /usr/local/etc/mpd5
# cp mpd.conf.sample mpd.conf
и приводим конфиг к такому виду (разобраться несложно):
mpd.conf:(нажмите, чтобы развернуть)
mpd.conf

default:
load pptp_server
pptp_server:
create bundle template B
set ipcp ranges 10.10.10.254/32 10.10.10.0/24
set iface up-script “/usr/local/abills/libexec/linkupdown mpd up”
set iface down-script “/usr/local/abills/libexec/linkupdown mpd down”
set iface enable proxy-arp
set iface idle 1800
set iface enable tcpmssfix
set ipcp yes vjcomp
set ipcp dns 8.8.8.8
set bundle enable compression
set bundle disable multilink
set ccp yes mppc
set mppc yes compress e40
set mppc yes compress e56
set mppc yes compress e128
set mppc yes compress stateless
create link template L pptp
set link action bundle B
set link disable multilink
set link yes acfcomp protocomp
set link no pap chap
set link enable chap
set link keep-alive 10 60
set link mtu 1400
set link mru 1400
set pptp self 192.168.11.222
set link enable incoming
set pptp disable windowing
load radius
radius:
set radius server localhost PASSWD 1812 1813
set radius retries 3
set radius timeout 3
set radius me 127.0.0.1
set auth acct-update 30
set auth enable radius-auth
set auth enable radius-acct
set radius enable message-authentic

[collapse]

НЕ ЗАБЫВАЕМ про отступы, mpd ОЧЕНЬ не любит их отсутствие!
Теперь правим конфиги радиуса:
# cd /usr/local/etc/raddb
файл users

файл acct_users:(нажмите, чтобы развернуть)
acct_users

DEFAULT Acct-Status-Type == Alive
Exec-Program = “/usr/local/abills/libexec/racct.pl”
DEFAULT Acct-Status-Type == Stop
Exec-Program = “/usr/local/abills/libexec/racct.pl”

[collapse]

в файл clients.conf прописываем пароль для доступа к радиус-серверу, тот что мы указывали в mpd.conf

В файле radiusd.conf необходимо создать функции для преавторизации и поставторизации в секции ‘modules’
развернуть

exec post_auth {
wait = yes
program = “/usr/local/abills/libexec/rauth.pl post_auth”
input_pairs = request
output_pairs = config
}

[collapse]

Закомментируем использование модулей ‘chap’ и добавим ‘pre_auth’ в разделе ‘authorize’
развернуть

[collapse]

Для оповещения о неавторизированых пользователях. Внесите в секцию ‘post-auth’

Создаем словарь для mpd5 – dictionary.mpd:
dictionary.mpd

ATTRIBUTE mpd-rule 1 string mpd
ATTRIBUTE mpd-pipe 2 string mpd
ATTRIBUTE mpd-queue 3 string mpd
ATTRIBUTE mpd-table 4 string mpd
ATTRIBUTE mpd-table-static 5 string mpd
ATTRIBUTE mpd-filter 6 string mpd
ATTRIBUTE mpd-limit 7 string mpd
ATTRIBUTE mpd-input-octets 8 string mpd
ATTRIBUTE mpd-input-packets 9 string mpd
ATTRIBUTE mpd-output-octets 10 string mpd
ATTRIBUTE mpd-output-packets 11 string mpd
ATTRIBUTE mpd-link 12 string mpd
ATTRIBUTE mpd-bundle 13 string mpd
ATTRIBUTE mpd-iface 14 string mpd
ATTRIBUTE mpd-iface-index 15 integer mpd
ATTRIBUTE mpd-input-acct 16 string mpd
ATTRIBUTE mpd-output-acct 17 string mpd
ATTRIBUTE mpd-drop-user 154 integer mpd

[collapse]

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

Добавляем необходимые модули perl:
# cd /root
# perl -MCPAN -e shell

развернуть

[collapse]

Добавляем в систему Апач:
# echo apache22_enable=\”YES\” >> /etc/rc.conf
# mkdir /var/log/httpd
# touch /var/log/httpd/abills-error.log
# cd /usr/ports/www/apache22
# make
# make install

После установки:
# /usr/local/abills/misc/sslcerts.sh apache
# echo “Include /usr/local/abills/misc/apache/abills_httpd.conf” >> /usr/local/etc/apache22/httpd.conf

Настраиваем AbbilS.
Заходим на https://your.host:9443/admin/
Логин/пароль – abills/abills.
Выбираем русский язык.
abills1
Теперь нужно сконфигурировать сервер доступа NAS
идем “Система-Сервер доступа”. Настройки:
развернуть

[collapse]

Теперь в строчке со вновь добавленным NAS нажимаем IP POOLS, чтобы добавить серверу доступа пул адресов, которые будут выдаваться клиентам при подключении к VPN-серверу:

Теперь настроим хотя бы один тарифный план: Система -> Internet -> Тарифные планы -> Добавить
Тут настраиваем по вкусу, при этом указываем пул-адресов (IP Pool).
RADIUS Parameters (,) – это собственно и есть параметры передаваемые радиусом системе ng_car.
Сюда для примера добавим:

где первая цифра (rate-limit) собственно ограничение скорости при закачке
вторая – (normal burst) – какую полосу отдать за 1 секунду;
третья – (extended burst) за первые полторы секунды.
Теперь добавим пользователя Клиенты -> Логины -> Добавить
Затем привязываем к нему тарифный план. Далее исходя из тарифного плана (предоплата/постоплата) смотрим, нужно ли ему для успешной авторизации деньги на счету, и если нужны, то добавляем. Далее активируем пользователя.
Проверяем, может ли пользователь авторизироваться в радиусе:
radtest testuser testpassword 127.0.0.1:1812 0 PASSWD 0 127.0.0.1
если ему выдался ИП и т.д., то все ок.
Для логирования mpd, добавляем следующее в /etc/syslog.conf
!mpd
*.* /var/log/mpd.log
Создаем файл и даем права
# touch /var/log/mpd.log
# chmod 600 /var/log/mpd.log

Настраиваем соединение с провайдером:
Вносим в rc.conf:
развернуть

# Запуск дозвона до провайдера при загрузке
# “prov” – название профиля в ppp.conf
ppp_enable=”YES”
ppp_mode=”ddial”
ppp_profile=”prov”

[collapse]

/etc/ppp/ppp.conf:(нажмите, чтобы развернуть)
ppp.conf

[collapse]

Настроим ipfw и nat
Укажу минимальный набор правил для доступа пользователей в интернет:
ed0 – внешняя сетевая карта
rl0 – внутреняя сетевая карта
192.168.11.0/24 – локальная сеть
МОЙ_БЕЛЫЙ_IP_АДРЕС – Внешний IP-адрес
table(1) – содержит созданные вами пулы адресов
Файрволл по умолчанию – закрытый.
Чтобы работать по SSH установил screen (abills долго собирается на старой машине) и добавил в правила фаервола (/usr/local/scripts/firewall.sh):
развернуть

[collapse]

и в /etc/rc.conf добавляем:

Җавап калдыру



All fields are required. Your email address will not be published.