Пролог.
Итак разбираемся с тем что у нас имеется:
1. Сервер с Suse 9.x только что поднятый.
2. Куча клиентских машин в рабочей группе настроенных на получение адреса по DHCP.
3. /dev/hands требуется, желательно версией попрямее.
4. Пакеты rp-pppoe, freeradius, radiusclient, pppd(с поддержкой radius(библиотека radius.so)), nacctd, iptables, htb(со скриптом запуска), dhcp-server, named, mysql, также потребуется биллинг, который работает с radius.(FreeNIBS, UTM(кстати в случае с UTM лучше использовать его radius-server(тогда freeradius не нужен)Но UTM платный и это его главный минус :|)).
5. Опыт в редактировании конфигов, пользования MySQL, опыт в первоначальной настройке сервера: сетевые интерфейсы и .т.п.
Ставим пакеты, перечисленные в пункте 4 , удовлетворяем все зависимости которые они запросят. Надеюсь с установкой пакетов все справятся. Тем более что почти все они есть в Suse.
Условимся, что ip интерфейса eth0 сервера, который смотрит в инет, 21x.9x.1xx.23.
Условимся, что ip интерфейса eth1 сервера, который смотрит в локалку, 192.168.1.1.
Условимся, что локальный домен: byte.local
Сеть 192.168.2.10/24 будет использоваться для pppoe.
Настройка DHCP сервера.
Если кому хочется бегать от машины к машине и прописывать на них ip адреса, то можно пропустить данных шаг. Но я человек ленивый и считаю, что на клиентских машинах никаких настроек не должно быть ;) Чтобы не бегать =)
Ставим dhcp-server. Конфиг /etc/dhcpd.conf делаем примерно таким:
*******Начало /etc/dhcpd.conf********
authoritative;
default-lease-time 259200; # 3 days
max-lease-time 604800; # 1 week
option domain-name "byte.local"; #имя локального домена
option routers 192.168.1.1; #маршрут по умолчанию
option domain-name-servers 192.168.1.1; #DNS сервер
option broadcast-address 192.168.1.255; #Адрес широковещательных пакетов
subnet 192.168.1.0 netmask 255.255.255.0 { # Подсеть
range 192.168.1.10 192.168.1.254; #С какого по какой ip выделять адреса.
# записи ниже нужны если вдруг у кого есть жгучее желание иметь постоянный ip в
# локалке
host baltazar.byte.local { #имя хоста
hardware ethernet 00:50:BF:44:27:D5; # MAC адрес клиента
fixed-address 192.168.1.10; # ip который хотим ему давать.
}
}
*******Конец /etc/dhcpd.conf********
Вот и все.
Запускаем демон dhcpd: /etc/init.d/dhcpd start
Если что не так – смотрим логи, ищем ошибки.
Кого мучает паранойя или есть умники в сети c DHCP-серверами =), кое-что в конфиг придется добавить. Search Google.
Настройка DNS-сервера.
Зачем DNS? Ну во-первых кеш, во-вторых удобно, если есть биллинг юзер заходит stat.byte.local, вводит логин\пасс, попадает на статистику. Красиво… Можно также поставить апач и сделать небольшую информ-страничку с новостями для юзеров, типа ╚с 00:00 до 02:00 в пятницу будет проходить профилактика╩, ну и т.п.
Итак ставим named, идем править /etc/named.conf
********Начало named.conf***********
options {
directory "/var/lib/named";
dump-file "/var/log/named_dump.db";
statistics-file "/var/log/named.stats";
!!!!!!!!!!!!forwarders { ЗДЕСЬ IP ВАШЕГО ПРОВА; 192.168.1.1; };
forward first;
listen-on port 53 { any; };
notify no;
};
zone "." in {
type hint;
file "root.hint";
};
zone "localhost" in {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in {
type master;
file "127.0.0.zone";
};
zone "byte.local" in {
type master;
file "byte.local.zone";
};
zone "1.168.192.in-addr.arpa" in {
type master;
file "192.168.1.zone";
};
zone "2.168.192.in-addr.arpa" in {
type master;
file "192.168.2.zone";
};
********Конец named.conf***********
Теперь идем создавать файлы в директории “/var/lib/named”
byte.local.zone
192.168.1.zone
192.168.2.zone
Короче те, что описали с named.conf.
Итак содержимое этих файлов:
*************** byte.local.zone****************
$TTL 1W
@ IN SOA @ root (
42 ; serial (d. adams)
2D ; refresh
4H ; retry
6W ; expiry
1W ) ; minimum
IN NS @
IN A 192.168.1.1
ice A 192.168.1.1
ns1 CNAME ice
ns2 A 192.168.2.1
stat CNAME ns2
*************** byte.local.zone****************
*************** 192.168.1.zone****************
$TTL 1W
@ IN SOA ice. root.ice. (
42 ; serial (d. adams)
2D ; refresh
4H ; retry
6W ; expiry
1W ) ; minimum
IN NS ice.
1 IN PTR ice-ns1.
2 IN PTR ap2100-1
*************** 192.168.1.zone****************
*************** 192.168.2.zone****************
$TTL 1W
@ IN SOA ice. root.ice. (
42 ; serial (d. adams)
2D ; refresh
4H ; retry
6W ; expiry
1W ) ; minimum
IN NS ice.
1 IN PTR stat-pppoe.
*************** 192.168.2.zone****************
Вот и все.
Запускаем демон named: /etc/init.d/named start
Если что не так – смотрим логи, ищем ошибки.
Повторюсь, что кого мучает паранойя или есть умники в сети, кое-что для безопасности в конфиг named придется добавить. Search Google.
Настройка PPPoE-сервера и демона pppd.
Здесь начинается самое сложное ;) А именно найти radius.so под Вашу версию pppd. В принципе можно пересобрать pppd из сырцов c поддержкой mschap,mppe и библиотеку тоже. Короче эту часть я оставляю на откуп Вам.
Вот линк: http://www.opennet.ru/base/net/pptp_mppe_mppc.txt.html. Хоть там и про pptpd, но установка pppd таким же образом.
Если у вас лежит в /usr/lib/pppd/версия pppd/ библиотека radius.so, то можно не беспокоиться и спокойно продолжать настройку дальше.
Ставим rp-pppoe.
Конфиг /etc/ppp/pppoe-server-options:
***************pppoe-server-options****************
# PPP options for the PPPoE server
# LIC: GPL
logfile /var/log/pppoe.log
debug
mtu 1472
mru 1472
auth
require-pap
#require-chap
default-asyncmap
ktune
lcp-echo-interval 20
lcp-echo-failure 2
ms-dns 192.168.1.1
ms-dns ЗДЕСЬ IP ВАШЕГО ПРОВА
plugin radius.so
plugin radattr.so
192.168.2.1:
nobsdcomp
noccp
noendpoint
noipdefault
noipx
novj
receive-all
***************pppoe-server-options****************
К конфиге /etc/ppp/options: lock
Для запуска сервера pppoe создадим скриптик pppoed запуска в /etc/init.d
Скриптик для Suse. Для других систем подгоняйте сами ;)
**************pppoed********************
#!/bin/bash
# init file for rp-pppoe server
#
# description: PPPOE kernel mode server
#
# processname: pppoe-server
# chkconfig: - 45 45
# source function library
. /etc/rc.status
case "$1" in
start)
echo -n "Starting PPPOE server: "
/usr/sbin/pppoe-server -I eth1 -L 192.168.2.1 -R 192.168.2.10
#Здесь eth1 - ваш pppoe server интерфейс
#192.168.2.1 - IP PPPoE сервера
#192.168.2.10 - Первый IP адрес клиента
touch /var/lock/subsys/pppoed
rc_status -v
;;
stop)
echo -n "Shutting down PPPOE server: "
killproc pppoe-server
rm -f /var/lock/subsys/pppoed
rc_status -v
;;
restart)
$0 stop
$0 start
;;
status)
status pppoe-server
;;
*)
echo "Usage: pppoed {start|stop|restart|status}"
exit 1
esac
exit 0
**************pppoed********************
При желании вместо pppoe-server можно использовать pptpd. Опции практически те же ;)
Конфиги даны только с поддержкой PAP. При желании и возможностях можно прикрутить и CHAP(MSCHAP).
Для проверки работает ли pppoe-сервер можно в файле /etc/ppp/pppoe-server-options закомментировать строку “plugin radius.so” и в файле /etc/ppp/pap-secrets написать
test * test 192.168.2.10
Запускаем pppoe-server: /etc/init.d/pppoed start
На любом клиенте создаем PPPoE соединение и используя логин\пароль test подключаемся. Смотрим дал ли нам сервер ip 192.168.2.10, и есть ли DNS-сервера и есть ли default route на 192.168.2.1
Если что не так копаем логи. После экспиримента строчку из pap-secrets удалить, в файле /etc/ppp/pppoe-server-options строку “plugin radius.so” разкомментировать и перезапустить pppoed.
Настройка HTB.
Подробнее о htb можно узнать здесь: http://www.opennet.ru/base/net/htb_saga.txt.html
Скрипт запуска htb можно скачать здесь:
http://freshmeat.net/projects/htb.init
Копируем этот скрипт в /etc/init.d
Создаем директорию /etc/sysconfig/htb
Создаем там файлы:
ppp0
ppp0-2.root
ppp0-2:10.ppp
тут и прописывается ограничение пропускной способности для клиентов.
*********ppp0*******
DEFAULT=30
R2Q=10
*********ppp0*******
*****ppp0-2.root*******
RATE=96Kbit
BURST=9k
*****ppp0-2.root*******
*****ppp0-2:10.ppp*****
RATE=96Kbit
BURST=9k
LEAF=sfq
RULE=*,192.168.2.0/24
*****ppp0-2:10.ppp*****
Эти файлы рассчитаны на пропуск примерно 11-12 kb\sec. Я не буду рассказывать про то, как настраивается htb. Про это отлично написано в статье, указанной выше.
Также я написал небольшой скриптик для того, чтобы создавать такие файлы для всех интерфейсов ppp с 0 по 254
*************create.ppp.shapers*************
#!/bin/bash
COUNTER=1
while [ $COUNTER -lt 254 ]; do
echo Shaper for interface ppp$COUNTER created!
rm -f /etc/sysconfig/htb/ppp$COUNTER
rm -f /etc/sysconfig/htb/ppp$COUNTER-2.root
rm -f /etc/sysconfig/htb/ppp$COUNTER-2:10.ppp
cp /etc/sysconfig/htb/ppp0 /etc/sysconfig/htb/ppp$COUNTER
cp /etc/sysconfig/htb/ppp0-2.root /etc/sysconfig/htb/ppp$COUNTER-2.root
cp /etc/sysconfig/htb/ppp0-2:10.ppp /etc/sysconfig/htb/ppp$COUNTER-2:10.ppp
let COUNTER=COUNTER+1
done
/etc/init.d/htb.init restart
*************create.ppp.shapers*************
Т.е. для того чтобы изменить пропускную способность для всех, изменяем всё что относится к ppp0, а потом запускаем скрипт.
Для того чтобы правила применялись при подключении клиента, необходимо создать в директории /etc/ppp/ip-up.d скрипт shaper.start
********shaper.start******
#!/bin/bash
/etc/init.d/htb.init restart
********shaper.start******
а в директории /etc/ppp/ip-down.d скрипт shaper.stop
********shaper.stop******
#!/bin/bash
/etc/init.d/htb.init restart
********shaper.stop******
Настройка Iptables.
Вот скрипт, который я использую для настройки файрволла.
****************main.rules.iptables****************
#!/bin/sh
iptables --flush
iptables -t nat --flush
clear
###########################################################################
#
# 1. Configuration options.
#
#
# 1.1 Internet Configuration.
#
INET_IP="21x.9x.1xx.23"
INET_IFACE="eth0"
#
# 1.2 Local Area Network configuration.
#
#
LAN_IP="192.168.1.1"
LAN_IP_RANGE="192.168.1.0/24"
LAN_IFACE="eth1"
#
# 1.3 VPN Configuration.
#
VPN_IP="192.168.2.1"
VPN_IP_RANGE="192.168.2.0/24"
VPN_IFACE="ppp+"
#
# 1.4 Localhost Configuration.
#
LO_IFACE="lo"
LO_IP="127.0.0.1"
#
# 1.5 IPTables Configuration.
#
IPTABLES="iptables"
###########################################################################
#
# 2. Module loading.
#
/sbin/depmod -a
#
# 2.1 Required modules
#
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state
#
# 2.2 Non-Required modules
#
#/sbin/modprobe ipt_owner
#/sbin/modprobe ipt_REJECT
#/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_irc
###########################################################################
#
# 3. /proc set up.
#
#
# 3.1 Required proc configuration
#
echo "1" > /proc/sys/net/ipv4/ip_forward
#
# 3.2 Non-Required proc configuration
#
#echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
#echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
#echo "1" > /proc/sys/net/ipv4/ip_dynaddr
###########################################################################
#
# 4. rules set up.
#
######
# 4.1 Filter table
#
#
# 4.1.1 Set policies
#
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
#
# 4.1.2 Create userspecified chains
#
$IPTABLES -N bad_tcp_packets
#
# Create separate chains for ICMP, TCP and UDP to traverse
#
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets
#
# 4.1.3 Create content in userspecified chains
#
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
#
# allowed chain
#
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
#
# TCP rules
#
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 25 -j allowed
#$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
#
# UDP ports
#
#$IPTABLES -A udp_packets -p UDP -s 0/0 --destination-port 53 -j ACCEPT
#
# ICMP rules
#
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
#
# 4.1.4 INPUT chain
#
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
#
# Rules for special networks not part of the Internet
#
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT
#$IPTABLES -A INPUT -p ALL -i $VPN_IFACE -s $VPN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $VPN_IP -j ACCEPT
#
# Special rule for DHCP requests from LAN, which are not caught properly
# otherwise.
#
$IPTABLES -A INPUT -p UDP -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT
#
# Rules for incoming packets from the internet.
#
$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
#
#SQUID
#
$IPTABLES -A INPUT -s 192.168.1.0/24 -p tcp --dport 3128 -j DROP
#$IPTABLES -A INPUT -p tcp --dport 3128 -s 192.168.2.0/24 -j ACCEPT
#
# Log weird packets that don't match the above.
#
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT INPUT packet died: "
#
# 4.1.5 FORWARD chain
#
$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
#
# Accept the packets we actually want to forward
#
$IPTABLES -A FORWARD -s 192.168.1.10 -d 192.168.0.1 -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# Log weird packets that don't match the above.
#
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "
#
# 4.1.6 OUTPUT chain
#
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
#
# Special OUTPUT rules to decide which IP's to allow.
#
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $VPN_IP -j ACCEPT
#
# Log weird packets that don't match the above.
#
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "
######
# 4.2 nat table
#
#
# 4.2.1 POSTROUTING chain
#
#
# Enable simple IP Forwarding and Network Address Translation
#
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP
$IPTABLES -t nat -A PREROUTING -i $VPN_IFACE -d ! $VPN_IP_RANGE -p tcp --dport 80 -j REDIRECT --to-port 3128
****************main.rules.iptables****************
Кроме того, чтобы пользователя пускало в сеть надо добавлять при каждом его входе правило в FORWARD и INPUT цепочки с его ip адресом, а также удалять их, когда пользователь отсоеденился. Для этого делаем скрипты:
*******/etc/ppp/ip-up.d/iptables*************
#!/bin/bash
IPT=/usr/sbin/iptables
UIP=$5
$IPT -A FORWARD -s $UIP -j ACCEPT
$IPT -A INPUT -s $UIP -j ACCEPT
*******/etc/ppp/ip-up.d/iptables*************
*******/etc/ppp/ip-down.d/iptables************
#!/bin/bash
IPT=/usr/sbin/iptables
UIP=$5
$IPT -D FORWARD -s $UIP -j ACCEPT
$IPT -D INPUT -s $UIP -j ACCEPT
*******/etc/ppp/ip-down.d/iptables************
Кстати, мысль для создания собственного биллинга: громим правило из скрипта(который кроном проходит по базе трафика и лимитов) при привышении лимита, пишем в базу пользователей что этот юзер залочен. Трафик перестает бежать, пользователь пытается переподключится и получает ошибку о неправильном логине\пароле, т.к. его аккаунт заблокирован. Я так и сделал, возможно, даже выложу скрипты и Web-интерфейс как только приведу в божеский вид. Проект типа сделаю. :)
Настройка прозрачного прокси SQUID.
В принципе эту часть можно и пропустить, если вам не интересно кеширование и блокирование баннеров, порно, а также статистика по посещенным адресам. Вот конфиг моего сквида, здесь все просто.
***********squid.conf**************
#Порт HTTP-PROXY
http_port 3128
#Порт ICP
icp_port 0
#Не кешировать скрипты
acl QUERY urlpath_regex cgi-bin/?
no_cache deny QUERY
#Кол-во ОЗУ для SQUID
cache_mem 128 MB
#Путь к директории кеша и его размер(1000)
cache_dir ufs /var/cache/squid 10000 16 256
#Путь к лог-файлу доступа к SQUID(Статистика работы через SQUID)
cache_access_log /var/log/squid/access.log
#Путь к лог-файлу SQUID - в нем события запуска SQUID и дочерних программ
cache_log /var/log/squid/cache.log
#Путь к лог-файлу Strore
cache_store_log /var/log/squid/store.log
#Ротация логов
logfile_rotate 10
#Таблица MIME-типов для SQUID
mime_table /etc/squid/mime.conf
#PID-файл SQUID
pid_filename /var/run/squid.pid
#Пользователь для анонимного доступа к FTP
ftp_user anonymous@
#SQUID формирует страницу с папками на FTP - этот параметр - кол-во папок
ftp_list_width 32
#Пассивный режим FTP
ftp_passive on
#Проверка подлинности FTP
ftp_sanitycheck on
#redirect_program /usr/local/rejik3/redirector /usr/local/rejik3/rejik.conf #это для режика
#Списки контроля доступа
acl server src 192.168.1.1/255.255.255.255 #Наш сервер
acl clients src 192.168.2.1-192.168.2.254/255.255.255.255
#Стандартные ACL
acl all src 0.0.0.0/0.0.0.0 #Все
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255 #Адрес localhost
acl SSL_ports port 443 563 #Порты SSL
acl SMTP port 25 #Для защиты от спама ;) Оказывается SQUID может делать relay
#Служебные ACL
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
#Теперь разрешаем доступ тому, кто указан в ACL
http_access allow server
http_access allow clients
http_access deny !Safe_ports
http_access deny SMTP
http_access deny all
#Разрешаем ICP-доступ всем
icp_access deny all
error_directory /etc/squid/errors
#Акселерация(для transparent прокси)
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
***********squid.conf**************
На этом настройка squid завершена, его можно запустить. Если нужна статистика по посещенным URL, советую использовать SARG (он есть в дистрибутиве)
Настройка FreeRADIUS(NetUP Radius)+RadiusClient
Решил написать различные варианты настройки с 2-мя серверами radius. Вы можете выбрать один из них. Хочу напомнить, что NetUP Radius входит в состав платного биллинга UTM. Поэтому советую использовать его, только если он куплен у производителя, а не украден в ближайшем варезнике. Тем более самописных биллинг можно очень легко заточить под свои задачи и сеть.
Итак, настраиваем radius client. Правим /etc/radiusclient/servers и /etc/radiusclient/radiusclient.conf
******servers********
127.0.0.1 oh2iFa
******servers********
Последовательность символов после ip это секрет для соединения сервера и клиента. Т.е. на сервере и на клиенте последовательность должна быть одинаковой.
********radiusclient.conf***************
auth_order radius,local
login_tries 4
login_timeout 60
nologin /etc/nologin
issue /etc/radiusclient/issue
# RADIUS settings
authserver localhost:1812
acctserver localhost:1812
servers /etc/radiusclient/servers
dictionary /etc/radiusclient/dictionary
login_radius /usr/sbin/login.radius
# RADIUS server
seqfile /var/run/radius.seq
mapfile /etc/radiusclient/port-id-map
default_realm
radius_timeout 10
radius_retries 3
login_local /bin/login
********radiusclient.conf***************
Настройка сервера NetUP Radius:
В /netup/utm/utm.cfg добавляем строки:
radius_port=1812
radius_host=127.0.0.1
radius_secret_key=oh2iFa
password_store_method=plain_text
и в автозагрузку добавляем /netup/utm/bin/netup_radius/netup_radiusd
Настройка сервера FreeRADIUS(с поддержкой MySQL).
Конфиг радиус сервера следующий(взято и опробовано из статьи Алекса Б. Юдкина):
************ radiusd.conf**********
prefix = /usr
exec_prefix = ${prefix}
sysconfdir = /etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
# Месторасположение конфигурационных и лог файлов.
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd
# Каталог с подгружаемыми модулями.
libdir = ${exec_prefix}/lib
# Месторасположение pid-файла. Содержащего идентификатор процесса.
pidfile = ${run_dir}/radiusd.pid
# Имя пользователя и группа от которых запускается FreeRADIUS
user = radius
group = radius
# Максимальное время (в секундах) используемое для обработки запроса.
max_request_time = 30
# Удалить запросы которые обрабатываются более чем max_request_time
delete_blocked_requests = no
# Время ожидания (в секундах) перед очисткой reply запроса отправленного NAS.
cleanup_delay = 5
# Максимальное количество запросов хранимых сервером. Это число должно быть равно
# количеству клиентов помноженному на 256.
# К примеру для четырех клиентов оно будет 1024.
max_requests = 5120
# Закрепить за ip адресом. По умолчанию RADIUS сервер при старте принимает
# запросы со всех ip адресов.
bind_address = 127.0.0.1
# Закрепить за FreeRADIUS конкретный port. Если указан ноль,
# то значение берется из /etc/services
port = 0
# Запретить/разрешить ip адреса в dns имена.
# Включение этой опции может сильно снизить производительность.
hostname_lookups = no
# Создавать/несоздавать отладочные файлы при падении сервера.
allow_core_dumps = no
# Разрешить использование регулярных выражений.
regular_expressions = yes
extended_expressions = yes
# Записывать полный User-Name аттрибут если найден в запросе.
log_stripped_names = no
# Записывать в лог попытки авторизации.
log_auth = yes
# Записывать в логи пароли при авторизации.
# log_auth_badpass - не корректные пароли
# log_auth_goodpass - корректные пароли
log_auth_badpass = yes
log_auth_goodpass = no
# Включить/выключить коллизию пользователей.
usercollide = no
# конвертировать логин и/или пароль до или после авторизации.
lower_user = no
lower_pass = no
# удалить пробелы в логине и/или пароле.
nospace_user = no
nospace_pass = no
# настройки безопасности от возможных DoS аттак.
security {
# Максимальное допустимое количество аттрибутов в RADIUS пакете.
max_attributes = 200
# Задержка (в секундах) перед отправкой Access-Reject пакета.
reject_delay = 1
# Не отвечать на запросы Status-Server
status_server = no
}
# Конфигрурация клиентов RADIUS сервера.
# Описывается в отдельном файле.
$INCLUDE ${confdir}/clients.conf
# Отключить snmp поддержку.
snmp=no
# Настрока пула процессов.
thread pool {
# количество первоначально запущенных процессов.
start_servers = 5
# Максимально возможное количество процессов.
max_servers = 32
# Динамическая регулировка количества процессов.
min_spare_servers = 3
max_spare_servers = 10
# Количество принимаемых запросов процессом. МОжет помочь при утечках памяти в
# RADIUS сервере. Если выставить 300, процессы будут периодически перегружаться
# для уборки мусора.
max_requests_per_server = 0
}
# Секция конфигурации динамических модулей.
modules {
# Модуль PAP авторизации.
# Необходим для обработки запросов с PAP авторизацией.
# encryption_scheme указывает в каком виде хранятся пароли.
# clear - подразумевает в открытом виде.
pap {
encryption_scheme = clear
}
# Модуль CHAP авторизации.
# Необходим для обработки запросов с CHAP авторизацией.
# authtype подразумевает обработку запросов только с аттрибутом Auth-Type=CHAP
chap {
authtype = CHAP
}
# Модуль преобработки запросов.
# Т.е. перед авторизацией пакета.
preprocess {
# huntgroups - хинт группы см. файл huntgoups.
# hints - хинты.
huntgroups = ${confdir}/huntgroups
hints = ${confdir}/hints
# Обработка Cisco VSA.
with_cisco_vsa_hack = no
}
# Модуль Microsoft CHAP авторизации.
# Поддерживает так же еще и Microsoft CHAP v2
# authtype подразумевает обработку запросов только с аттрибутом Auth-Type=MS-CHAP
# use_mppe = no указывает на отсутствие компресии VPN туннеля.
mschap {
authtype = MS-CHAP
use_mppe = no
}
# Модуль записей Livingston RADIUS типа.
# usersfile содержит авторизационные записи пользователей.
# Рекомендуется использовать только для тестов и выставления значений по умолчанию.
# acctusersfile содержит пользователей подлежащих учету (аккаунтингу).
# compat - совместимость. При использовании файлов только FreeRADIUS можно отключить.
files {
usersfile = ${confdir}/users
compat = no
}
# Запись детального лога аккаунтинговых пакетов.
detail {
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
detailperm = 0600
}
# Запись детального лога пакетов авторизации.
detail auth_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
detailperm = 0600
}
# Запись детального лога reply пакетов.
detail reply_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
detailperm = 0600
}
# Создать уникальный ключ для аккаунтинг сессии.
# Многие NAS повторно используют Acct-Session-ID.
# key перечисление аттрибутов для генерации Acct-Session-ID
acct_unique {
key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port-Id"
}
# Конфигурация авторизации и аккаунтинга посредством СУБД
# содержится в отдельном файле cakesql.conf
$INCLUDE ${confdir}/sql.conf
}
# Авторизация
# сначала идет пакет передается в preprocess
# где может быть модифицирован.
# Далее chap mschap обрабатывают chap и mschap авторизацию.
authorize {
preprocess
chap
mschap
# Не ведем логи пакетов авторизации.
# auth_log
files
mysql
}
# Аунтификация
# Секция содержит модули доступные, для аунтификации.
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
}
# Преобразование аккаунтинговых пакетов.
preacct {
preprocess
}
# Секция ведения аккаунтинга.
accounting {
# Создание Acct-Session-Id если ваш NAS генрит их вполне корректно можете убрать.
acct_unique
# Не создаем detail лог.
detail
# Помещать аккаунтинговые пакеты в СУБД
mysql
}
# Секция ведения логов reply-пакетов.
post-auth {
# Не ведем детальный лог репли пакетов.
reply_log
}
Редактируем sql.conf:
************** sql.conf***************
sql mysql {
# Database type
# Current supported are: rlm_sql_mysql, rlm_sql_postgresql,
# rlm_sql_iodbc, rlm_sql_oracle, rlm_sql_unixodbc, rlm_sql_freetds
driver = "rlm_sql_mysql"
# Connect info
server = "localhost"
login = "root"
password = "ВАШ ПАРОЛЬ НА MySQL"
# Database table configuration
radius_db = "radius"
************** sql.conf***************
Файл naslist:
localhost local other
Файл clients:
localhost oh2iFa
В пакете с радиусом идет дамп базы для него:
/usr/share/doc/freeradius/db_mysql.sql
Создаем базу данных radius и применяем sql-файл к ней.
Теперь в базу можно забивать пользователей. Руками или через самописный Web-интерфейс :). Описание полей БД можно найти в документации по FreeRADIUS.
Настройка NetAcct
Скачать netacct можно здесь: http://netacct-mysql.gabrovo.com/?section=download&PHPSESSID=a1ad535ef56...
Рекомендую скачать последний stable. Там же есть русская дока по нему.
Для пользователей NetUP UTM рекомендую использовать именно этот коллектор. Подробно о его конфигурировании можно прочитать в документации по UTM.
Net-acct необходимо сконфигурировать с опцией "--with-mysql" с указанием пути к mysql(для UTM собираем без поддержки mysql).
После компиляции и установки программы создаем базу данных для net-acct с помощью sql-файла netacct.sql, который присутствует в архиве. Также можно добавить пользователя netacct в MySQL и предоставить ему права на базу netacct.
Правим конфиг
**************/etc/naccttab**************
flush 60 #Через какой интервал кидать в базу инфу(сек)
fdelay 60 #Время (cек),через которое, после завершения сетевой активности, #данные о трафике могут быть записаны в базу.
database mysql
mysql_user netacct #пользователь в MySQL
mysql_password netacct #пароль пользователя для базы
mysql_host localhost #хост
mysql_database netacct #имя базы данных
mysql_table accounting #имя таблицы
notdev eth0 #какой интерфейс не слушать, что бы не было двойного обсчета
device eth1 #интерфейс на котором будет считаться трафик
ignoremask 255.255.255.0 # исключить из подсчета трафик идущий внутри сети
ignorenet 127.0.0.0 255.0.0.0 # игнор для loopback
debug 2 # уровень отладки
debugfile /tmp/nacctd.debug # куда класть лог отладки
headers tr 40 38
headers lo 14 12
headers isdn 4 0
headers eth 14 12
headers plip 14 12
# For dynamic slip/ppp
dynamicip /var/run # где хранятся файлы динам. ip
dynamicnet 202.36.94.0 255.255.255.0
exclude-name-lookup 202.36.94.1 255.255.255.255
exclude-name-lookup 202.36.94.253 255.255.255.255
# For disabling certain fields
# This is commented out by default
# Field 7 is disabled by default so we match the old (pre 0.5) output format
# disable 2 # disable output of protocol
# disable 3 # disable output of source address
# disable 4 # disable output of source port
# disable 5 # disable output of destination address
# disable 6 # disable output of destination port
disable 7 # disable output of packets count
# disable 8 # disable output of byte count
# disable 9 # disable output of device name
# disable 10 # disable output of user name
**************/etc/naccttab**************
Запускаем nacctd. В случае проблем проверяем права на базу, и копаем логи.
Эпилог.
Ну вот и готов наш сервер. Осталось только написать скрипты для биллинга, и почту, jabber прикрутить.
Пожелания и предложения можете отправлять на mi6@bk.ru. Можете дополнить мою статью, и я сделаю другую ее версию. Пиво отправляйте бочками =)
Автор: Морозов Иван(aka Morph), 2005 год.
Последние комментарии
10 лет 22 недели назад
10 лет 41 неделя назад
10 лет 51 неделя назад
10 лет 51 неделя назад
11 лет 40 недель назад
11 лет 40 недель назад
11 лет 41 неделя назад
11 лет 41 неделя назад
11 лет 41 неделя назад
11 лет 43 недели назад