О самой установке Debian GNU/Linux можно прочесть на debian.org.
Предполагается что система уже стоит и Internet получаем через NAT на eth1(IP 10.0.0.3), а локальная сеть на eth0(IP 192.168.4.1).
ПО которое нам понадобится
freeradius — радиус сервер
radiusclient1 — радиус клиент
mysql-server — сервер баз данных
apache2 — веб сервер
libdbi-perl libdbd-mysql-perl libdigest-md4-perl libdigest-sha1-perl libcrypt-des-perl — дополнительные библиотеки для интерпритатора Perl
sudo — программа ограничения привилегий
snmp — утилита для работы с Simple Network Management Protocol
pptpd — ВПН сервер
netdiag — набор утилит для диагностики работы сети
iptraf — утилита для просмотра сетевой статистики
mc — файловый менеджер
lynx — консольный браузер
Ставим все одной строкой
aptitude install freeradius radiusclient1 mysql-server apache2 libdbi-perl libdbd-mysql-perl libdigest-md4-perl libdigest-sha1-perl libcrypt-des-perl sudo snmp pptpd netdiag iptraf mc lynx
Настроим параметры системы при загрузке
# nano /etc/rc.local
дописываем
# Выполнить скрипт изменения переменных ядра
exec /etc/sysctl_tune.sh
# Восстановление настроек фаервола
iptables-restore /etc/iptables.conf
создадим скрипт изменения переменных ядра
# touch /etc/sysctl_tune.sh
делаем его исполняемым
# chmod +x /etc/sysctl_tune.sh
открываем для редактирования
# nano /etc/sysctl_tune.sh
вписываем
#!/bin/sh
# Включение форвардинга vpn
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# Включение форвардинга
echo "1" > /proc/sys/net/ipv4/ip_forward
# Увеличение размера очередей
echo "32000000" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
# Время ожидания до закрытия соединения
echo "14400" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
# Время ожидания до посылки FIN пакета
echo "60" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait
# Время ожидания до посылки FIN пакета
echo "10" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent
# Для защиты от syn флуда
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# Увеличиваем размер backlog очереди
echo "4096" > /proc/sys/net/ipv4/tcp_max_syn_backlog
# Число начальных SYN и SYNACK пересылок для TCP соединения
echo "1" > /proc/sys/net/ipv4/tcp_synack_retries
echo "1" > /proc/sys/net/ipv4/tcp_syn_retries
Сколько секунд ожидать приема FIN до полного закрытия сокета
echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
# Как часто посылать сообщение о поддержании keep alive соединения
echo "15" > /proc/sys/net/ipv4/tcp_keepalive_intvl
# Сколько пакетов проверки keepalive посылать, прежде чем соединение будет закрыто.
echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes
# Зaпрещаем TCP window scaling
echo "0" > /proc/sys/net/ipv4/tcp_window_scaling
# Запрещаем selective acknowledgements, RFC2018
echo "0" > /proc/sys/net/ipv4/tcp_sack
# Запрещаем TCP timestamps, RFC1323
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
# Уличиваем размер буфера для приема и отправки данных через сокеты.
echo "1048576" > /proc/sys/net/core/rmem_max
echo "1048576" > /proc/sys/net/core/rmem_default
echo "1048576" > /proc/sys/net/core/wmem_max
echo "1048576" > /proc/sys/net/core/wmem_default
# Через какое время убивать соединеие закрытое на нашей стороне
echo "1" > /proc/sys/net/ipv4/tcp_orphan_retries
Указываем какие модули должны подгружаться при загрузке.
# nano /etc/modules
Дописываем в конец.
ip_conntrack
ip_gre
ip_nat_pptp
ip_conntrack_ftp
ip_nat_ftp
Настройка freeradius сервера
# echo "" > /etc/freeradius/users
# nano /etc/freeradius/users
пишем
DEFAULT Auth-Type = Accept
потом
# nano /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"
Пропишем разрешенных клиентов
# nano /etc/freeradius/clients.conf
Всё ремарим и дописываем
client 127.0.0.1 {
secret = radsecret
shortname = shortname
}
client 192.168.4.1 {
secret = radsecret
shortname = shortname
}
Допишем пред и пост авторизацию для биллинга
# nano /etc/freeradius/radiusd.conf
после строк
unix {
radwtmp = ${logdir}/radwtmp
}
дописываем
abills_preauth
exec abills_preauth {
program = "/usr/abills/libexec/rauth.pl pre_auth"
wait = yes
input_pairs = request
shell_escape = yes
output_pairs = config
}
abills_postauth
exec abills_postauth {
program = "/usr/abills/libexec/rauth.pl post_auth"
wait = yes
input_pairs = request
shell_escape = yes
output_pairs = config
}
abills_auth
exec abills_auth {
program = "/usr/abills/libexec/rauth.pl"
wait = yes
input_pairs = request
shell_escape = yes
output = no
output_pairs = reply
}
abills_acc
exec abills_acc {
program = "/usr/abills/libexec/racct.pl"
wait = yes
input_pairs = request
shell_escape = yes
output = no
output_pairs = reply
}
правим /etc/freeradius/sites-available/default
# nano /etc/freeradius/sites-available/default
комментируем лишнее и добавляем недостающее
тут
authorize {
preprocess
abills_preauth
#chap
#mschap
suffix
#eap {
# ok = return
#}
#unix
files
abills_auth
#expiration
#logintime
#pap
}
здесь
preacct {
preprocess
#acct_unique
#suffix
abills_acc
}
и еще здесь
post-auth {
exec
Post-Auth-Type REJECT {
# attr_filter.access_reject
abills_postauth
}
и это тоже заремарить
#pre-proxy {
#}
#post-proxy {
# eap
#}
теперь нужно поправить файл со словарями
# nano /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
Настройка radiusclient1
Пропишем сервера авторизации и аккаунтинга
# nano /etc/radiusclient/radiusclient.conf
вписываем
authserver 127.0.0.1
acctserver 127.0.0.1
добавим секретное слово для сервера
# nano /etc/radiusclient/servers
дописываем
127.0.0.1 radsecret
клиенту тоже нужно поправить файл словарей
# nano /etc/radiusclient/dictionary
в конце дописываем
ATTRIBUTE Acct-Interim-Interval 85 integer
ATTRIBUTE Session-Octets-Limit 227 integer
ATTRIBUTE Octets-Direction 228 integer
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
Настройка Apache2
Добавляем поддержку mod_rewrite.
# ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
Редактируем /etc/apache2/sites-enabled/000-default
# nano /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
Настройка pptpd
В файле options
# nano /etc/ppp/options
убрать ремарку
+chap
В файле pptpd-options
# nano /etc/ppp/pptpd-options
ремарим лишнее и дописываем недостающее
#require-mppe-128
#require-mschap-v2
plugin radius.so
plugin radattr.so
debug
ms-dns 192.168.4.1
В файле /etc/pptpd.conf
# nano /etc/pptpd.conf
всё удаляем и пишем
ppp /usr/sbin/pppd
option /etc/ppp/pptpd-options
debug
logwtmp
localip 172.16.255.254
listen 192.168.4.1
для работы шейпера в файле /etc/ppp/ip-up
# nano /etc/ppp/ip-up
дописываем в конце
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`
FILTERS=`/usr/bin/awk '/Filter-Id/ {print $2}' /var/run/radattr.$1`
/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 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/iptables -t nat -A POSTROUTING -s $5 -j MASQUERADE
/sbin/iptables -t filter -A INPUT -s $5 -d 10.0.0.3 -p tcp -m tcp --dport 3128 -j ACCEPT
/sbin/iptables -t filter -A INPUT -s $5 -d 10.0.0.3 -p tcp -m tcp --dport 80 -j ACCEPT
/sbin/iptables -t filter -A INPUT -s $5 -d 10.0.0.3 -p tcp -m tcp --dport 110 -j ACCEPT
/sbin/iptables -t filter -A INPUT -s $5 -d 10.0.0.3 -p tcp -m tcp --dport 25 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -d $5 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -s $5 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -d $5 -j ACCEPT
Настройка Abills
Сначала нужно скачать архив с биллингом
# cd /root
# wget http://kent.dl.sourceforge.net/project/abills/abills/0.50/abills-0.50.tgz
Теперь распакуем его
# tar -xf abills-0.50.tgz
Переместим распакованный биллинг в директорию /usr/
# mv abills /usr/
Заходим в консоль mysql
# mysql -u root -p
mysql> CREATE DATABASE abills;
mysql> quit
Теперь нужно скинуть дамп в базу
# cd /usr/abills
# mysql -u root -p abills < abills.sql
Когда дамп залит нужно поправить конфиг Abills, для этого
# cd /usr/abills/libexec
# cp config.pl.default config.pl
# nano config.pl
поменять реквизиты доступа к базе данных. Для того чтобы использовать большие буквы в логине строку
$conf{USERNAMEREGEXP}="^[a-z0-9_][a-z0-9_-]*\$";
поменять на
$conf{USERNAMEREGEXP}="^[A-Za-z0-9_][A-za-z0-9_-]*\$";
Правим
# nano /etc/sudoers
дописываем
www-data ALL = NOPASSWD: /usr/abills/misc/pppd_kill
теперь настроим переодическое исполнение скриптов
# nano /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
1 3 * * * root /usr/abills/libexec/periodic backup
устанавливаем права на файлы веб интерфейса
# chown -Rf www-data /usr/abills/cgi-bin
Теперь нужно создать недостающие каталоги и установить на них корректные права
# mkdir /usr/abills/backup
# chown www-data /usr/abills/backup
# mkdir /usr/abills/var
# mkdir /usr/abills/var/log
В файле
# nano /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';
Открываем 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
Название: Любое
FIRST IP: 172.16.0.1
Количество: 256
Приоритет: по умолчанию "0"
STATIC: отмечаем если нужно
Проверить чтобы в файле hosts
# nano /etc/hosts
на всех IP имена хостов совпадали
127.0.0.1 localhost billing
192.168.4.1 billing
10.0.0.3 billing
теперь можно
# reboot
или
# shutdown -r now
Настройка мониторинга Squid в Abills
Подразумевается что Squid уже стоит и работает. В файл /etc/squid/squid.conf
# nano /etc/squid/squid.conf
добавить
acl abillsserver src 127.0.0.1/255.255.255.255
http_access allow manager abillsserver
а для transparent
http_port 127.0.0.1:3128 transparent
теперь нужно включить модуль squid
# nano /usr/abills/libexec/config.pl
в секции @MODULES добавить
'Squid'
а ниже дописать конфиг модуля
$conf{SQUID_HOST}='localhost'; #Squid host
$conf{SQUID_PORT}='3128'; #Squid port
$conf{SQUID_CACHEMGR_PASSWD}='your_squid_pass'; #Squid password
$conf{SQUID_RESOLVIP}=0; #Resolve Clients IP addreses
После успешной установки появляется меню - /Мониторинг/Squid/
Версии использованного ПО
# freeradius -v
freeradius: FreeRADIUS Version 2.0.4, for host i486-pc-linux-gnu
# mysql -u root -p
...Server version: 5.0.51a-24+lenny4 (Debian)...
# apache2 -v
Server version: Apache/2.2.9 (Debian)
Server built: Mar 28 2010 18:03:05
# pptpd -v
pptpd v1.3.4
# perl -v
This is perl, v5.10.0 built for i486-linux-gnu-thread-multi
ссылка на источник обязательна!
Комментариев нет:
Отправить комментарий