Це стара версія документу!
NoDeny Next
Установка NoDeny Nex на Debian
Установка NoDeny+ на Debian для меня нужна, т.к. все свои сервера я держу на виртуалках, а как известно, у FreeBSD проблемы с скоростью записи на диск под KVM\QEMU!
К тому же я не использую файрвол билинга, который заточен под FreeBSD
NoDeny загрузка
на момент написания статьи есть 3 репозитория:
- демоверсия
svn://nodeny-plus.com.ua/nodenyfree
- стабильная
svn://nodeny-plus.com.ua/release
- новая ветка
svn://nodeny-plus.com.ua/release/next
я буду использовать последний, по скольку у меня есть подписка
и так, скачиваем билинг
cd /usr/local svn co svn://nodeny-plus.com.ua/release/next nodeny
Ставим пакеты для билинга
apt-get install -y libcrypt-rijndael-perl libdbd-mysql-perl libjson-perl libnet-arp-perl libcpanel-json-xs-perl liblwp-protocol-https-perl libcgi-pm-perl
liqpay\pingserver\и другие
apt-get install -y libxml-simple-perl libdigest-sha-perl liblwp-useragent-determined-perl libcrypt-ssleay-perl
для telegram
cpanm -n WWW::Telegram::BotAPI
для ponmon
apt-get install -y snmp libnet-telnet-cisco-perl libparallel-forkmanager-perl cpanm -n Net::SNMP::Util
Web Server
Установка Apache
apt-get install -yq apache2
Включаем нужные нам модули для апача:
sudo a2enmod ssl rewrite suexec include cgid
Создадим конфиг вместо дефолтного
nano /etc/apache2/sites-available/nodeny.conf
с таким содержимым
<VirtualHost *:80> ServerAdmin admin@example.com ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/nodeny <FilesMatch "\.(pl|cgi|shtml|phtml|php)$"> AddHandler cgi-script .pl Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch </FilesMatch> <IfModule alias_module> ScriptAlias /cgi-bin/ "/usr/lib/cgi-bin/" #ErrorDocument 404 "/cgi-bin/stat.pl" DirectoryIndex "/cgi-bin/stat.pl" </IfModule> <IfModule !alias_module> DirectoryIndex index.html </IfModule> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Создадим симлинки для билинга
rm -fR /usr/lib/cgi-bin ln -s /usr/local/nodeny/htdocs/ /var/www/nodeny ln -s /usr/local/nodeny/cgi-bin/ /usr/lib/cgi-bin
Выставим права
perl /usr/local/nodeny/install.pl -w=www-data
Применяем свой конфиг
sudo a2ensite nodeny.conf sudo a2dissite 000-default.conf
проверим ошибки конфигурации
sudo apache2ctl configtest
Вы должны увидеть следующий результат:
Syntax OK
Применяем изменения
systemctl restart apache2 systemctl status apache2
Открываем порты фаервола
sudo ufw allow http sudo ufw allow https sudo ufw reload
(1) Для включения https https://www.8host.com/blog/sozdanie-sertifikata-lets-encrypt-dlya-apache-v-debian-10/
База данных
Я не буду использовать MySQL, т.к. с билингом прекрасно работает и MariaDB!
Источник
А на MariaDB можно будет поднять Galera Cluster!!!
mysql -u root -p
Создадим базу данных nodeny
create database nodeny; use nodeny; source /usr/local/nodeny/bill.sql;
Install apache2 php phpMyAdmin
Webmin
FreeRadius
https://kifarunix.com/install-freeradius-with-daloradius-on-debian-9/
Данный вариант установки не из официальной документации и разработан для нашей сети но может быть портирован и в другие сети! Он не имеет MySQL модуля, но есть мощный модуль PERL, который позволяет делать запросы к базе на много удобней в плане манипуляций. На официальном сайте FreeRadius сказано что rlm_perl производительней rlm_sql. Использование даного варианта вы делаете на свой страх и риск :).
Установка пакетов
apt-get install freeradius freeradius-mysql freeradius-utils sudo ufw allow to any port 1812 proto udp sudo ufw allow to any port 1813 proto udp sudo ufw reload
Удалим лишнее, предварительно сделав бэкап
cp -r /etc/freeradius/3.0/ /etc/freeradius/3.0.orig/ rm /etc/freeradius/3.0/sites-enabled/* rm /etc/freeradius/3.0/mods-enabled/eap rm /etc/freeradius/3.0/mods-enabled/ntlm_auth rm /etc/freeradius/3.0/mods-enabled/mschap
nano /etc/freeradius/3.0/mods-config/attr_filter/access_reject
поправим здесь
DEFAULT # EAP-Message =* ANY, State =* ANY, Message-Authenticator =* ANY, Error-Cause =* ANY, Reply-Message =* ANY, MS-CHAP-Error =* ANY, Proxy-State =* ANY
Создадим основной конфиг
nano /etc/freeradius/3.0/sites-enabled/nodeny
с таким содержимым:
- /etc/freeradius/3.0/sites-enabled/nodeny
server nodeny { listen { type = auth ipaddr = * port = 1812 } listen { type = acct ipaddr = * port = 1813 } authorize { detail # preprocess files perl } authenticate { Auth-Type PAP { pap } # Auth-Type CHAP { # chap # } # Auth-Type MSCHAP { # mschap # } Auth-Type Perl { perl } } preacct { acct_unique preprocess } accounting { attr_filter.accounting_response perl } session { radutmp } post-auth { perl } }
Также, по желанию, можно подгрузить конфиг сервера статистики
ln -s /etc/freeradius/3.0/sites-available/status /etc/freeradius/3.0/sites-enabled/status
Опишем локальный сервер доступа для тестов, сюда же вписываем все свои БРАСы по аналогии
echo '' > /etc/freeradius/3.0/clients.conf nano /etc/freeradius/3.0/clients.conf
- /etc/freeradius/3.0/clients.conf
client 127.0.0.1 { ipaddr = 127.0.0.1 secret = hardpass5 shortname = NoDenyDB nastype = cisco }
echo '' > /etc/freeradius/3.0/users nano /etc/freeradius/3.0/users
- /etc/freeradius/3.0/users
DEFAULT Auth-Type = Perl Fall-Through = yes
echo '' > /etc/freeradius/3.0/mods-enabled/perl nano /etc/freeradius/3.0/mods-enabled/perl
- /etc/freeradius/3.0/mods-enabled/perl
perl { filename = /usr/local/nodeny/nod/_radius.pl }
Я не знаю почему, но радиус отказывается работать с моим скриптом на дебиане по причине недостаточных прав на файл. я перепробовал все комбинации прав и владельцев на файл, но результат тот же. Единственное что помогло, так это изменить в настройках самого радиуса пользователя и группу либо вообще их закоментировать. Я так и поступил:)
nano /etc/freeradius/3.0/radiusd.conf
в секции “security” комментируем пользователя и группу
# user = freerad # group = freerad
Mysql процедуры
ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci;
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radcheck`(IN `login` VARCHAR(64)) BEGIN DECLARE real_login VARCHAR(64) DEFAULT NULL; SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; SELECT id, name, 'Password' AS Attribute, AES_DECRYPT(passwd,'hardpass') AS VALUE,'==' FROM users WHERE name=real_login; END$$ DELIMITER ; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radupdate`(IN `login` VARCHAR(64), IN `ip` VARCHAR(16), IN `properties` VARCHAR(255)) BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL; DECLARE ip_index INT ; SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; IF login REGEXP '[+][0-9]+$' THEN SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'+','') AS UNSIGNED) INTO ip_index; ELSE SET ip_index=0;END IF; SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip; CALL set_auth(ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); END$$ DELIMITER ; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radreply`(IN `login` VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT ; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL; SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; IF login REGEXP '[+][0-9]+$' THEN SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'+','') AS UNSIGNED) INTO ip_index; ELSE SET ip_index=0;END IF; SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num1(usr_id, ip_index) INTO usr_ip; SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radparam`(IN `login` VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE real_login VARCHAR(64) DEFAULT NULL; IF login REGEXP '[+][0-9]+$' THEN SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; ELSE SET real_login=login;END IF; SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT s.module, s.param FROM `v_services` s LEFT JOIN users u ON(s.uid=u.id) WHERE u.state='on' AND s.uid=usr_id AND s.tags NOT LIKE '%,wait_pos_balance,%'; END$$ DELIMITER ; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radtraf`(IN `login` VARCHAR(64), IN `ses` VARCHAR(32), IN `trafin` BIGINT(20), IN `trafout` BIGINT(20)) BEGIN DECLARE usr_id INT; DECLARE t_in BIGINT; DECLARE t_out BIGINT; DECLARE real_login VARCHAR(64) DEFAULT NULL; IF login REGEXP '[+][0-9]+$' THEN SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; ELSE SET real_login=login;END IF; SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT trafin - IFNULL((SELECT traf_in FROM ses_traf WHERE ses_id=ses LIMIT 1),0) INTO t_in; SELECT trafout - IFNULL((SELECT traf_out FROM ses_traf WHERE ses_id=ses LIMIT 1),0) INTO t_out; UPDATE users_trf SET in1=in1 + t_in, out1=out1 + t_out WHERE uid=usr_id; INSERT INTO ses_traf SET ses_id=ses, traf_in=trafin, traf_out=trafout, TIME=UNIX_TIMESTAMP() ON DUPLICATE KEY UPDATE traf_in=trafin, traf_out=trafout, TIME=UNIX_TIMESTAMP(); SET @s = CONCAT('INSERT INTO X', YEAR(NOW()), '_', MONTH(NOW()), '_', DAY(NOW()), ' VALUES(?,?,?,?,?,?)'); PREPARE stmt1 FROM @s; SET @iface = 0; SET @cls = 1; SET @ts = CEIL(UNIX_TIMESTAMP() / 60) * 60; SET @usr_id = usr_id; SET @t_in = t_in; SET @t_out = t_out; EXECUTE stmt1 USING @usr_id, @iface, @ts, @cls, @t_in, @t_out; DEALLOCATE PREPARE stmt1; END$$ DELIMITER ;
Завершение установки
systemctl enable freeradius
systemctl restart freeradius
systemctl status freeradius
rc.local
https://softnastroy.com/content/vklyuchaem-rclocal-v-debian-9-stretch.html