База знаний

www. IT-Mehanika .ru --  журнал доброго админа

HOW-TO pptpd+mppe+abills 0.40b для малого офиса или мелкого провайдера.

Источник статьи находиться по адресу: http://forum.ubuntu.ru/index.php?topic=54691.0

Автор: Nesmit

Биллинг находится здесь: http://abills.net.ua

Цель:
1.Обеспечить интернетом локальную сеть, числом 10 и более.
2.Учет трафика
3.Учет финансов
4.Создание тарифных планов.
5.Ограничение по скорости
6.Шифрование 128bit, причин много.
7.Без шифрования, но используя mschapv2.
8.Шифрование личного кабинета (apache SSL)
9.Возможность модернизации:  интеграция почтового сервера с биллингом и т.д.

 

 


 

Список литературы:

Мною найдено 2 полезные статьи по установки abills.
http://habrahabr.ru/blogs/linux/23650/ - наша основа
http://silverghost.org.ua/2008/10/13/ustanovka-billinga-abills-na-ubuntu-804-lts-server-mikrotik-router-os-v-kachestve-servera-dostupa/ - наша основа №2
еще:
http://www.opennet.ru/base/net/abills_server.txt.html — не менее полезная, но microtik'а у нас нет. Smiley
http://www.xakep.ru/magazine/xa/112/136/1.asp — pppoe
Описание параметров в pptpd
http://www.compress.ru/article.aspx?id=18183&iid=842

Информацию будем брать из первых 2х статей, они ближе всего к нашей теме. Получится переработанная 1я статья с добавлением некоторых деталей из 2й + мои дороботки.

Ссылка на конфы фрирадиуса 1.1.7 и pptp. Этот фаил сильно облегчит поднятие сервера.
vpn-config.7z
Только права на файлы после замены восстановите!

1. Устанавливаем систему:

Мой выбор пал на LTS дистрибутив Ubuntu 8.04,  это уже проверенная система в которой отработан набор пакетов и немаловажная часть... длительная поддержка. Хороший Админ — ленивый Админ. Зачем нам головная боль? Wink

После установки обновляемся, ставим все самое последнее:

Код:
    #apt-get update
#apt-get dist-upgrade

В моем случае, слилось 81,5мб. И ребут.

заходим под рутом.

Код:
     $ sudo -s -H 

 

2. Устанавливаем необходимые пакеты одной строчкой:

Код:
apt-get install mysql-server mysql-client libmysqlclient15-dev apache2 apache2-doc apache2-mpm-prefork apache2-utils /
 libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick /
php5-imap php5-mcrypt libdbi-perl libdbd-mysql-perl libdigest-md4-perl libdigest-sha1-perl libcrypt-des-perl freeradius radiusclient1 /
radiusclient1 pptpd


Во время установки MySQL сервер 2 раза спрашивает пароль root для mysql server, скоро понадобится!
Устанавливается Freeradius, система аккаутинга. По умолчанию ставиться 1.1.x версия, это то что нужно!

Запускаем установленные модули для апача:

Код:
       #a2enmod ssl
#a2enmod rewrite
#a2enmod suexec
#a2enmod include
Перезапускаем apache:
Код:
       #/etc/init.d/apache2 restart
#a2enmod rewrite -ОБЯЗАТЕЛЕН, иначе получите ошибку при входе в админку!
 

3. Скачиваем abills версия 0.40, с сайта http://abills.net.ua ИМЕННО ЭТУ ВЕРСИЮ

распаковываем в /usr/abills

4. Создаем недостающие каталоги и меняем права:

Код:
        mkdir /usr/abills/backup
             chown -R www-data:www-data /usr/abills/backup
             mkdir /usr/abills/cgi-bin/admin/nets
             chown -R www-data:www-data /usr/abills/cgi-bin/

             mkdir /usr/abills/var
             mkdir /usr/abills/var/log
             chown -R freerad:freerad /usr/abills/var
             mkdir /usr/abills/var


Настраиваем конфигурационный фаил Abills
Далее редактируем /etc/sudoers добавляем строку. По этой команде убиваются vpn туннели.
Цитата
www-data        ALL = NOPASSWD: /usr/abills/misc/pppd_kill

В /etc/crontab заносим следующее.


Цитата
*/5 *  *  *  *   root    /usr/abills/libexec/billd -all
1    0  *  *  *   root    /usr/abills/libexec/periodic daily
1    0  1  *  *   root    /usr/abills/libexec/periodic monthly
#backup
1    3  *  *  *   root     /usr/abills/libexec/periodic backup

5. Настраиваем freeradius:

Без заморочек, берите уже готовые из архива!!!! НЕ ЗАБУДТЕ ПОСЛЕ ЗАМЕНЫ ВЕРНУТЬ ОБРАТНО ПРАВА НА ФАЙЛЫ.

Редактируем /etc/freeradius/users оставляем только следующие строки (Будте внимательны, лишний табулятор может попить вам крови):

Цитата
DEFAULT Auth-Type = Accept
Exec-Program-Wait = "/usr/abills/libexec/rauth.pl"
остальное удаляем.


Далее редактируем /etc/freeradius/acct_users дописываем в конец

Цитата
DEFAULT Acct-Status-Type == Start
Exec-Program = "/usr/abills/libexec/racct.pl"

DEFAULT Acct-Status-Type == Alive
Exec-Program = "/usr/abills/libexec/racct.pl"

DEFAULT Acct-Status-Type == Stop
Exec-Program = "/usr/abills/libexec/racct.pl"


Редактируем /etc/freeradius/clients.conf коментируем все, в конец добавляем (клиент/сервер на локальной машине, если будут на разных кодовое слово лучше поменять)

Цитата
client localhost {
secret = radsecret
shortname = shortname
}


В /etc/freeradius/radiusd.conf в секции «authorize» внести pre_auth и раскомментировать mschap

Цитата
authorize {
preprocess
pre_auth
chap
#counter
#attr_filter
#eap
suffix
files
#etc_smbpasswd
#sql
mschap
}
В секции mschap включаем шифрование:
Цитата
use_mppe = yes
require_encryption = yes
require_strong = yes

В секции «modules» нужно создать функции для преавторизации и поставторизации
Цитата
exec pre_auth {
wait = yes
program = "/usr/abills/libexec/rauth.pl pre_auth"
input_pairs = request
output_pairs = config
}

Цитата
exec post_auth {
wait = yes
program = "/usr/abills/libexec/rauth.pl post_auth"
input_pairs = request
output_pairs = config
}

Для оповещения о неавторизированых пользователях. Внесите в секцию «post-auth»
Цитата
post-auth {
Post-Auth-Type REJECT {
post_auth
}
}


Переходим к редактированию файла /etc/freeradius/dictionary добавляем в конец

Цитата
# Limit session traffic
ATTRIBUTE       Session-Octets-Limit            227     integer
# What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
ATTRIBUTE       Octets-Direction                228     integer
# Connection Speed Limit
ATTRIBUTE       PPPD-Upstream-Speed-Limit       230     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit     231     integer
ATTRIBUTE       PPPD-Upstream-Speed-Limit-1     232     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit-1   233     integer
ATTRIBUTE       PPPD-Upstream-Speed-Limit-2     234     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit-2   235     integer
ATTRIBUTE       PPPD-Upstream-Speed-Limit-3     236     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit-3   237     integer
ATTRIBUTE Acct-Interim-Interval 85 integer
$INCLUDE   /etc/freeradius/exppp
Фаил exppp, берем из дистрибутива, этот фаил будет отвечать за использование «бесплатных» сетей или пиринговых сетей.


После этого перезапускаем радиус:


/etc/init.d/freeradius restart


Если пишет ошибку, то команда freeradius -X выдает лог и служит для поиска онных.

6. Настраиваем radiusclient, если лень берем готовые файлы из архива:

Правим файл /etc/radiusclient/radiusclient.conf :
Цитата
authserver      127.0.0.1
acctserver      127.0.0.1
Редактируем /etc/radiusclient/servers
Цитата
127.0.0.1 radsecret
качаем: http://cakebilling.googlecode.com/files/etc.tar.bz2
из этого архива нам нужно 2 файла из папки radiusclient
dictionary и dictionary.microsoft
кладем в /etc/radiusclient/
эти файлы отвечают за поддержку mschap v2 и mppe

в фаил dictionary добавляем строки:
Цитата
# Limit session traffic
ATTRIBUTE       Session-Octets-Limit            227     integer
# What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
ATTRIBUTE       Octets-Direction                228     integer
# Connection Speed Limit
ATTRIBUTE       PPPD-Upstream-Speed-Limit       230     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit     231     integer
ATTRIBUTE       PPPD-Upstream-Speed-Limit-1     232     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit-1   233     integer
ATTRIBUTE       PPPD-Upstream-Speed-Limit-2     234     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit-2   235     integer
ATTRIBUTE       PPPD-Upstream-Speed-Limit-3     236     integer
ATTRIBUTE       PPPD-Downstream-Speed-Limit-3   237     integer
ATTRIBUTE       Acct-Interim-Interval            85     integer


правим фаил /etc/hosts

Цитата
127.0.0.1   localhost vpn-server
127.0.1.1   localhost vpn-server

vpn-server - это имя ВАШЕГО сервера, меняете на ваше усмотрение. Иначе радиус клиент не сможет соедениться с радиус-сервером.

7. Далее необходимо создать БД для AbillS

Код:
   mysql -u root -p
        GRANT ALL ON abills.* TO abills@localhost IDENTIFIED BY "yourpassword";
        CREATE DATABASE abills;

Теперь дамп БД из каталога с abills нужно занести в БД
Код:

mysql -u root -p abills < abills.sql  
После установки, может возникнуть проблема с кодировкой базы, по этому желательно поправить в файле abills.sql добавив в него принудительно указанную кодировку. Например:
Цитата
CREATE TABLE `nas_ippools` (
`pool_id` int(10) unsigned NOT NULL default 0,
`nas_id` smallint(5) unsigned NOT NULL default '0',
UNIQUE KEY `nas` (`nas_id`,`pool_id`)
) DEFAULT CHARSET=cp1251  ;

 

8. Редактируем /etc/apache2/sites-enabled/000-default

Цитата

DocumentRoot /usr/abills/cgi-bin/
Alias /abills "/usr/abills/cgi-bin/"


RewriteEngine on  
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_CGI_AUTHORIZATION:%1]  
Options Indexes ExecCGI SymLinksIfOwnerMatch  

AddHandler cgi-script .cgi  
Options Indexes ExecCGI FollowSymLinks  
AllowOverride none    
DirectoryIndex index.cgi    
#Options ExecCGI      

Order allow,deny      
Deny from all      


#Admin interface  

AddHandler cgi-script .cgi  
Options Indexes ExecCGI FollowSymLinks    
AllowOverride none  
DirectoryIndex index.cgi  
order deny,allow  
allow from all  

Меняем кодироку на cp1251 здесь /etc/apache2/conf.d/charset

Цитата
AddDefaultCharset cp1251


Перезапускаем apache

Код:

/etc/init.d/apache2 restart

 

9. Установка pptpd, можно взять из архива.

Редактируем /etc/pptpd.conf
Цитата
ppp /usr/sbin/pppd
option /etc/ppp/pptpd-options
localip 192.168.160.1

Редактируем /etc/ppp/options
Цитата
+mschap-v2

Редактируем /etc/ppp/pptpd-options

Цитата
plugin radius.so
plugin radattr.so

ms-dns 192.168.160.1
asyncmap 0
lcp-echo-failure 30
lcp-echo-interval 5
ipcp-accept-local
ipcp-accept-remote
По умолчанию конф настроен на шифрование.


Пишем скрипт /etc/ppp/ip-up.d/shaper и даем права запуска. РАБОТАЕТ НА 0.40b

Код:
#!/bin/sh 

if [ -f /var/run/radattr.$1 ]
   then
   DOWNSPEED=`/usr/bin/awk  '/PPPD-Downstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
   UPSPEED=`/usr/bin/awk  '/PPPD-Upstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
  
# echo $DOWNSPEED
# echo $UPSPEED >
 
    /sbin/tc qdisc del dev $1 root    > /dev/null
    /sbin/tc qdisc del dev $1 ingress > /dev/null

 ##### speed server->client
   if [ "$UPSPEED" != "0" ] ;
   then
#     /sbin/tc qdisc add dev $1 root handle 1: htb default 20 r2q 1
     /sbin/tc qdisc add dev $1 root handle 1: htb default 20
       /sbin/tc class add dev $1 parent 1: classid 1:1 htb rate ${UPSPEED}kbit burst 4k
     /sbin/tc class add dev $1 parent 1:1 classid 1:10 htb rate ${UPSPEED}kbit burst 4k prio 1
     /sbin/tc class add dev $1 parent 1:1 classid 1:20 htb rate ${UPSPEED}kbit burst 4k prio 2
     /sbin/tc qdisc add dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 1500
     /sbin/tc qdisc add dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 1500
     /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
     /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10
     /sbin/tc filter add dev $1 parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u160x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10
   fi
 ##### speed client->server
   if [ "$DOWNSPEED" != "0" ] ;
   then
     /sbin/tc qdisc add dev $1 handle ffff: ingress
     /sbin/tc filter add dev $1 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${DOWNSPEED}kbit burst 12k drop flowid :1
   fi
 fi

Внимание! В строке "/sbin/tc qdisc add dev $1 root handle 1: htb default 20 r2q 1" шейпера , лучше поставить "r2q 10", если у вас ругань в логах и вы используете тарифы со скоростью выше 128 кбит. (спасибо Squid007)

10. Настрока Abills


Открываем web-интерфейс админки по адресу http://вашхост/admin
Логин/пароль abills/abills их можно будет потом сменить.

Цитата
Идем System configuration->NAS
Ip пишем 127.0.0.1
Выбираем тип pppd:pppd + Radius
Alive (sec.): 120
RADIUS Parameters (,): Acct-Interim-Interval=60

Теперь добавляем IP POOLs

Цитата
ставим 192.168.160.2-192.168.160.254

 

11. По желанию, устанавливаем squid, делаем его прозрачным.


Инструкция для настройки Squid в прозрачный режим, находится тут: http://forum.ubuntu.ru/index.php?topic=3244.0

12. Включаем нат и прописываем следущие строчки в фаил  rc.local


правила фаервола:


ip адрес 192.168.1.8, смотрит в сторону adsl роутера.

Цитата
# Сбросить правила и удалить цепочки.
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

#Правила для NAT
iptables -t nat -A POSTROUTING -s 192.168.160.0/255.255.255.0 -j SNAT --to-source 192.168.1.8

#Правило для прозрачного прокси, если таковой имеется.
#iptables -t nat -A PREROUTING -p tcp -s 192.168.160.0/24 --dport 80 -j REDIRECT --to-port 8031

#Закрываем важные порты на Интерфейсах
#iptables -A INPUT -p TCP -i eth0 --dport 8031 -j DROP #Порты proxy
#iptables -A INPUT -p TCP -i eth1 --dport 8031 -j DROP
iptables -A INPUT -p TCP -i eth0 --dport 3306 -j DROP #mysql
iptables -A INPUT -p TCP -i eth1 --dport 3306 -j DROP



#Открываем Фовардинг
echo "1" >  /proc/sys/net/ipv4/ip_dynaddr
echo "1" >  /proc/sys/net/ipv4/ip_forward

exit 0



13. Apache2 + SSL можно сделать по следующей инструкции:

https://help.ubuntu.com/community/forum/server/apache2/SSL

14.Правим конф /usr/abills/Abills/defs.conf

меняем только приведенные ниже строки
Цитата
$SNMPWALK = '/usr/bin/snmpwalk';
$SNMPSET = '/usr/bin/snmpset';
$GZIP = '/bin/gzip';
$TAR='/bin/tar';
$MYSQLDUMP = '/usr/bin/mysqldump';
$IFCONFIG='/sbin/ifconfig';
теперь работает backup.


Создаем тарифы, добавляем пользователей.
Тут главное сначала создать группы тарифов, а потом сами тарифы. Кроме этого читайте на WiKi подробно все опции. Обычно начинают орать раньше чем поймут что опции означают.

PS: По данной инструкции мной было поднято 4 сервера и успешно работают.
PPS: Если нужно убрать шифрование, делаем так:
Убираем строчку "require-mppe-128" в файле /etc/ppp/pptpd-options Это даст бОльшую стабильность VPN туннелей.
А так же используйте сетевые карты intel или 3com. PPTP протокол на реалтеках глючит.

Все, удачи.