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.1646442302.txt.gz
  • Востаннє змінено: 05/03/2022 01:05
  • повз Method