Показаны сообщения с ярлыком FreeRadius. Показать все сообщения
Показаны сообщения с ярлыком FreeRadius. Показать все сообщения

среда, 30 июня 2010 г.

Установка и настройка Network Access Server Abills + Freeradius + pptpd + mysql + Apache2 + Squid на Debian GNU/Linux

О самой установке 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

При копировании материалов
ссылка на источник обязательна!


Читать дальше...

вторник, 11 августа 2009 г.

Настройка сервера доступа на FreeBSD (PPPOE + FREERADIUS)

Итак описываю ситуацию при которой мне впервые пришлось столкнуться с FreeBSD. После переезда в другой город(больше в 5 раз) пришел я устраиваться на работу к одному ISP меня взяли с испытательным сроком в 1 месяц и дали тестовое задание поднять NAS на FreeBSD. Его установку и настройку я опишу.

Дали мне машинку с CD приводом HDD 6.5Gb
1 CD FreeBSD 7.0 и доступ в интернет по внутренней сети.

Немного погуглил и прочитав про возможные подводные камни начал установку. Саму установку описывать нет смысла так как все предельно ясно.
Система установлена можно приниматься за работу.
# whereis pppoed
pppoed: /usr/libexec/pppoed

и мы увидим уже установленный демон PPPOE
Настроим его, для этого в файлах
/etc/ppp/ppp.conf

pppoe-in:
 set login
 allow mode direct
 set mru 1492
 set mtu 1492
 set speed sync
 set log Phase Chat LCP IPCP CCP tun command chap
 disable eap pap chap chap81
 enable lqr
 enable MSCHAPv2
 set timeout 0
 set ifaddr 10.0.0.1 10.0.0.2-254
 set dns 192.168.1.1 4.2.2.2
 accept dns


/etc/ppp/ppp.secret

USERNAME PASSWORD * * *


где USERNAME это имя тестового пользователя, а PASSWORD его пароль теперь можно проверить его работоспособность запускаем pppoe сервер командой
/usr/libexec/pppoed -p SERVICE_NAME -l pppoe-in IFACE_NAME

В данной конфигурации IP адрес клиенту назначается автоматически для использования конкретного адреса, нужно в файле
/etc/ppp/ppp.conf
убрать строку
set ifaddr 10.0.0.1 10.0.0.2-254

и запись в файле
/etc/ppp/ppp.secret
привести к виду
USERNAME PASSWORD 10.0.0.2 * *

аутентификация предусмотренная в данном случае MSCHAPv2 если требуется другой вид аутентификации то в файле
/etc/ppp/ppp.conf
измените строку
enable MSCHAPv2

так как нужно Вам.
Для аутентификации через FREERADIUS изменим предыдущий конфиг но сначала поставим FREERADIUS.
Набираем
# whereis freeradius

видим где лежит порт
freeradius: /usr/ports/net/freeradius

переходим в каталог порта
# cd /usr/ports/net/freeradius

и даем команды
# make config

устанавливаем нужные опции в том числе и поддержку MySQL жмем [OK]
# make

и
# make install

FREERADIUS с MySQL установлен можно приступить к конфигурации данной связки для этого команда
# echo "acct RADIUS_IP SECRET_KEY" >> /etc/radius.conf
# echo "auth RADIUS_IP SECRET_KEY" >> /etc/radius.conf

где RADIUS_IP – IP адрес radius сервера, SECRET_KEY – секретный ключ. SECRET_KEY устанавливается в файле
/usr/local/etc/raddb/clients.conf


client localhost {
secret = SECRET_KEY
shortname = localhost
}


в файле /usr/local/etc/raddb/sql.conf можно записать свои SQL запросы, описывать не вижу смысла ,примеров в интернете много.

меняем конфигурацию pppoed

/etc/ppp/ppp.conf

pppoe-in:
 set login
 allow mode direct
 set mru 1492
 set mtu 1492
 set speed sync
 set log Phase Chat LCP IPCP CCP tun command chap
 disable eap pap chap chap81
 enable lqr
 enable MSCHAPv2
 set timeout 0
 set radius /etc/radius.conf
 set ifaddr 10.0.0.1 10.0.0.2-254
 set dns 192.168.1.1 4.2.2.2
 accept dns


Для автозагрузки всего этого хозяйства нужно добавить в файл

/etc/rc.conf

radiusd_enable="YES"
pppoed_enable="YES"
pppoed_provider="SERVICE_NAME"
pppoed_flags="-l pppoe-in"
pppoed_interface="rl1"

При копировании материалов
ссылка на источник обязательна!


Читать дальше...