ABillS. Установка Freeradius

Приведу пример обновления или установки Freeradius 3.0.23 из исходных кодов.
ABillS и Freeradius у меня будут работать в одной операционной системе Ubuntu Server 18.04.

Первым делом переключимся на root пользователя и если Freeradius был ранее установлен, то посмотрим какая версия установлена в системе:

sudo -i
/usr/local/freeradius/sbin/radiusd -v

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

apt install perl libmysqlclient-dev libgdbm5 libgdbm-dev make gcc build-essential snmp libpcap-dev libhiredis-dev libperl-dev libtalloc-dev

Посмотрим куда установлены perl библиотеки и убедимся что есть символическая ссылка:

find /usr/lib/ | grep libperl.so
ln -s /usr/lib/x86_64-linux-gnu/libperl.so.5.26 /usr/lib/x86_64-linux-gnu/libperl.so

Если ранее был установлен Freeradius, то можно сделать копию конфигурации и словарей, а потом удалить директорию:

tar -cvjf /usr/local/backup_freeradius2.tar.bz2 /usr/local/freeradius/
rm -r /usr/local/freeradius

Скачаем архив с новой версией Freeradius (доступные версии можно посмотреть тут ftp://ftp.freeradius.org/pub/freeradius/):

cd /opt
wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.23.tar.gz

Распакуем скачанный архив и выполним установку:

tar zxvf freeradius-server-3.0.23.tar.gz
cd freeradius-server-3.0.23
./configure --prefix=/usr/local/freeradius --with-rlm-perl-lib-dir=/usr/lib/x86_64-linux-gnu/ --with-dhcp=yes --with-openssl=no > /dev/null
make
make install
ln -s /usr/local/freeradius/sbin/radiusd /usr/sbin/radiusd

Удалим ненужные файлы конфигурации и скопируем готовые из директории с ABillS:

rm /usr/local/freeradius/etc/raddb/sites-enabled/*
cp /usr/abills/misc/freeradius/v3/mods-enabled/perl /usr/local/freeradius/etc/raddb/mods-enabled/perl
cp /usr/abills/misc/freeradius/v3/mods-enabled/sql /usr/local/freeradius/etc/raddb/mods-enabled/
cp /usr/abills/misc/freeradius/v3/sites-enabled/abills_default /usr/local/freeradius/etc/raddb/sites-enabled/abills_default
cp /usr/abills/misc/freeradius/v3/users /usr/local/freeradius/etc/raddb/users
echo '' > /usr/local/freeradius/etc/raddb/clients.conf

Очистим clients.conf так как будем хранить сервера доступа в mysql базе данных.
Подразумевается что была создана группа и пользователь, а также обязательно после обновления установки установим права на директории:

groupadd freerad
useradd -g freerad -s /bash/bash freerad
chown -R freerad:freerad /usr/local/freeradius/etc/raddb
mkdir /var/run/radiusd/
chown -R freerad:freerad /var/run/radiusd/
mkdir /var/log/radacct
chown freerad:freerad /var/log/radacct

Отредактируем основной файл конфигурации Freeradius:

nano /usr/local/freeradius/etc/raddb/radiusd.conf
prefix = /usr/local/freeradius
user = freerad
group = freerad

Также я изменил немного эти параметры:

thread pool {
start_servers = 8
max_servers = 32
min_spare_servers = 8
max_spare_servers = 32
max_requests_per_server = 0
}

Можно также вместо * указать IP на котором будет работать FreeRADIUS, иначе будет на всех:

listen {
        ipaddr = *

В текстовом редакторе откроем файл:

nano  /usr/local/freeradius/etc/raddb/mods-enabled/sql

Настроим подключение к базе данных:

sql {
        database = "mysql"
        driver = "rlm_sql_${database}"
        server = "127.0.0.1"
        #port = 3306
        login = "abills"
        password = "sqlpassword"
        radius_db = "abills"

'%secretkey%' меняем на 'test12345678901234567890'

Откроем файл словаря в текстовом редакторе:

nano /usr/local/freeradius/etc/raddb/dictionary

Также добавим в словарь нужные пары, например я добавлял:

ATTRIBUTE DHCP-Router-IP-Address 241 ipaddr
ATTRIBUTE DHCP-Mask              242 integer
ATTRIBUTE L4-Redirect      243 integer
ATTRIBUTE L4-Redirect-ipset      244 string
ATTRIBUTE DHCP-Option82          245 octets
# 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
ATTRIBUTE Acct-Input-Gigawords    52      integer
ATTRIBUTE Acct-Output-Gigawords   53      integer

Создадим скрипт запуска Freeradius:

nano /etc/init.d/radiusd

Добавим в него:

#!/bin/sh
#
# radiusd  Start the radius daemon.
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
#
#    Copyright (C) 2001-2008 The FreeRADIUS Project http://www.freeradius.org
#   chkconfig: - 58 74
#   description: radiusd is service access provider Daemon.
### BEGIN INIT INFO
# Provides: radiusd
# Required-Start: $remote_fs $network $syslog
# Should-Start: mysql radiusd
# Required-Stop: $remote_fs $syslog
# Should-Stop: radiusd
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop radiusd
# Description: radiusd is access provider service Daemon.
### END INIT INFO
 
prefix=/usr/local/freeradius
exec_prefix=${prefix}
sbindir=${exec_prefix}/sbin
localstatedir=/var
logdir=${localstatedir}/log/radius
rundir=/usr/local/freeradius/var/run/radiusd/
sysconfdir=${prefix}/etc
#
#  If you have issues with OpenSSL, uncomment these next lines.
#
#  Something similar may work for MySQL, and you may also
#  have to LD_PRELOAD libz.so
#
#LD_LIBRARY_PATH=
#LD_RUN_PATH=:
#LD_PRELOAD=libcrypto.so
export LD_LIBRARY_PATH LD_RUN_PATH LD_PRELOAD
 
RADIUSD=$sbindir/radiusd
RADDBDIR=${sysconfdir}/raddb
RADIUS_USER='freerad'
DESC="FreeRADIUS"
 
#
#  See 'man radiusd' for details on command-line options.
#
ARGS=""
 
test -f $RADIUSD || exit 0
test -f $RADDBDIR/radiusd.conf || exit 0
 
if [ ! -d $rundir ] ; then
    mkdir $rundir
    chown ${RADIUS_USER}:${RADIUS_USER} $rundir
    chmod 775 $rundir
fi
 
if [ ! -d $logdir ] ; then
    mkdir $logdir
    chown ${RADIUS_USER}:${RADIUS_USER} $logdir
    chmod 770 $logdir
    chmod g+s $logdir
fi
 
if [ ! -f $logdir/radius.log ]; then
        touch $logdir/radius.log
fi
 
chown ${RADIUS_USER}:${RADIUS_USER} $logdir/radius.log
chown -R ${RADIUS_USER}:${RADIUS_USER} /usr/local/freeradius/etc/raddb
chown -R ${RADIUS_USER}:${RADIUS_USER} ${rundir}/..
chmod 660 $logdir/radius.log
 
case "$1" in
  start)
  echo -n "Starting $DESC:"
  $RADIUSD $ARGS
  echo "radiusd"
  ;;
  stop)
  [ -z "$2" ] && echo -n "Stopping $DESC: "
        [ -f $rundir/radiusd.pid ] && kill -TERM `cat $rundir/radiusd.pid`
  [ -z "$2" ] && echo "radiusd."
  ;;
  reload|force-reload)
  echo "Reloading $DESC configuration files."
  [ -f $rundir/radiusd.pid ] && kill -HUP `cat $rundir/radiusd.pid`
  ;;
  restart)
  sh $0 stop quiet
  sleep 3
  sh $0 start
  ;;
  check)
  $RADIUSD -CX $ARGS
  exit $?
  ;;
  *)
        echo "Usage: /etc/init.d/$RADIUS {start|stop|reload|restart|check}"
        exit 1
        stop
        ;;
  status)
        status \$prog
        ;;
  restart|force-reload)
        stop
        start
        ;;
  try-restart|condrestart)
        if status \$prog > /dev/null; then
            stop
            start
        fi
        ;;
  reload)
        exit 3
        ;;
  *)
        echo \$"Usage: \$0 {start|stop|status|restart|try-restart|force-reload}"
        exit 2
esac

Активируем его:

chmod +x /etc/init.d/radiusd
update-rc.d radiusd defaults
update-rc.d radiusd enable

Любой из команд сделаем тестовый запуск:

radiusd -X
/usr/sbin/radiusd -X

Если выводится много данных, то можно писать их в файл для дальнейшего анализа:

radiusd -X > debug.txt

Если все ок, остановим клавишами Ctrl+C и запустим в обычном режиме:

service radiusd start

Проверим запустился ли Freeradius:

/etc/init.d/radiusd status
service radiusd status
systemctl status radiusd 
ps ax | grep rad
netstat -anp | grep 1812
netstat -anp | grep 1813
nmap -sU -p 1813 localhost
tcpdump -i eno5 port 1812 or port 1813 or port 3799

Для удобства можно создать символическую ссылку на файл логов в стандартной директории логов:

ln -s /usr/local/freeradius/var/log/radius/radius.log /var/log/radius.log

Смотрите также мои статьи:

Оставьте комментарий

Добавить комментарий