debian:nodeny

Це стара версія документу!


NoDeny Next

Установка NoDeny+ на Debian мені потрібна, т.к. всі свої сервери я тримаю на віртуалках, а як відомо, у FreeBSD проблеми зі швидкістю запису на диск під KVM QEMU!

До того ж, я не використовую файрвол білінгу, який заточений під FreeBSD

на момент написання статті є 3 репозиторії:

  • демоверсія svn://nodeny-plus.com.ua/nodenyfree
  • стабільна svn://nodeny-plus.com.ua/release
  • нова гілка svn://nodeny-plus.com.ua/release/next

я буду використовувати останній, оскільки у мене є підписка 8-)

і так, завантажуємо білінг

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

Встановлення 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;
 
 
 
 

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

Видалимо зайве, попередньо зробивши бекап :-D

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
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

https://wiki.mikbill.pro/billing/bez_deneg

Цей сайт використовує кукі. Перебуваючи тут, ви погоджуєтеся з їх зберіганням на вашому комп'ютері. Також ви підтверджуєте, що прочитали і зрозуміли нашу Політику конфіденційності. Якщо ви не згодні - покиньте сайт.Більше інформації про куки
  • debian/nodeny.1646442580.txt.gz
  • Востаннє змінено: 05/03/2022 01:09
  • повз Method