debian:nodeny

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
Наступна ревізія
Попередня ревізія
debian:nodeny [2022/03/05 03:11] Methoddebian:nodeny [2025/07/27 20:58] (поточний) Method
Рядок 1: Рядок 1:
 ====== NoDeny Next ====== ====== NoDeny Next ======
-===== Встановлення NoDeny Nex на Debian =====+===== Встановлення NoDeny Next на Debian =====
  
 <WRAP center round info 65%> <WRAP center round info 65%>
Рядок 49: Рядок 49:
 </code> </code>
  
-===== Web Server ===== +===== База даних ===== 
-Встановлення Apache+<WRAP center round important 100%> 
 +Я не використовуватиму MySQL, оскільки з білінгом чудово працює і Percona server for mysql 8! 
 +[[https://andreyex.ru/operacionnaya-sistema-debian/kak-ustanovit-mariadb-na-debian-10/|Джерело]]\\ 
 +А на Percona можна буде підняти Galera Cluster! 
 +</WRAP> 
 +{{section>debian:percona8#vstanovlennja_percona_mysql_server_8_na_debian_12}} 
 <code bash> <code bash>
-apt-get install -yq apache2+mysql -u root -p
 </code> </code>
 +
 +Створимо базу даних nodeny
 +<code mysql>
 +create database nodeny;
 +use nodeny;
 +source /usr/local/nodeny/bill.sql;
 +</code>
 +
 +===== Web Server =====
 +
 +{{section>debian:apache&noheader}}
  
 Включаємо потрібні нам модулі для опача: Включаємо потрібні нам модулі для опача:
 <code bash> <code bash>
-sudo a2enmod ssl rewrite suexec include cgid+sudo a2enmod cgid
 </code> </code>
  
Рядок 74: Рядок 91:
     AddHandler cgi-script .pl     AddHandler cgi-script .pl
     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
 +    CGIPassAuth On
 </FilesMatch> </FilesMatch>
 <IfModule alias_module> <IfModule alias_module>
Рядок 120: Рядок 138:
 systemctl restart apache2 systemctl restart apache2
 systemctl status apache2 systemctl status apache2
-</code> 
- 
-Відкриваємо порти фаєрволу 
-<code bash> 
-sudo ufw allow http 
-sudo ufw allow https 
-sudo ufw reload 
 </code> </code>
  
 (1) Для включення https [[https://www.8host.com/blog/sozdanie-sertifikata-lets-encrypt-dlya-apache-v-debian-10/]] (1) Для включення https [[https://www.8host.com/blog/sozdanie-sertifikata-lets-encrypt-dlya-apache-v-debian-10/]]
  
-===== База даних ===== +<code bash> 
-<WRAP center round important 100%> +==== Налаштування NoDeny Plus ====
-Я не використовуватиму MySQL, оскільки з білінгом чудово працює і MariaDB! +
-[[https://andreyex.ru/operacionnaya-sistema-debian/kak-ustanovit-mariadb-na-debian-10/|Джерело]]\\ +
-А на MariaDB можна буде підняти Galera Cluster! +
-</WRAP> +
-{{section>debian:mariadb&mariadb&noheader}}+
  
 +Підключимо модулі (-x), встановимо власника та права на файли (-w), створимо стартовий конфіг (-m), створимо суперадміну (-p):
 <code bash> <code bash>
-mysql -u root -p+perl /usr/local/nodeny/install.pl -
 +perl /usr/local/nodeny/install.pl -x 
 +perl /usr/local/nodeny/install.pl -w=www-data 
 +perl /usr/local/nodeny/install.pl -p admin=12345
 </code> </code>
  
-Створимо базу даних nodeny 
-<code mysql> 
-create database nodeny; 
-use nodeny; 
-source /usr/local/nodeny/bill.sql; 
 </code> </code>
  
-<code bash> +===== Install phpMyAdmin ===== 
-</code>+За потреби встановлюємо phpMyAdmin
  
-===== Install apache2 php phpMyAdmin ===== 
-{{section>debian:apache&noheader}} 
 {{section>debian:phpmyadmin&noheader}} {{section>debian:phpmyadmin&noheader}}
  
 +===== Webmin =====
 +За бажанням встановлюємо Webmin
  
- 
-===== Webmin ===== 
 {{section>debian:webmin&webmin&noheader}} {{section>debian:webmin&webmin&noheader}}
  
 ===== FreeRadius ===== ===== FreeRadius =====
-[[https://kifarunix.com/install-freeradius-with-daloradius-on-debian-9/]] 
- 
 <WRAP center round important 100%> <WRAP center round important 100%>
 Даний варіант установки не з офіційної документації і розроблений для нашої мережі, але може бути портований і в інші мережі! Даний варіант установки не з офіційної документації і розроблений для нашої мережі, але може бути портований і в інші мережі!
Рядок 172: Рядок 173:
 </WRAP> </WRAP>
  
 +<code bash>
 +apt-get install freeradius freeradius-mysql freeradius-utils libauthen-radius-perl
  
-==== Встановлення пакетів ==== +apt-mark hold freeradius 
-<code bash> + 
-apt-get install freeradius freeradius-mysql freeradius-utils +cpanm -n Authen::Radius
-   +
-sudo ufw allow to any port 1812 proto udp +
-sudo ufw allow to any port 1813 proto udp +
-sudo ufw reload+
 </code> </code>
  
 +==== Конфігурація ====
 Видалимо зайве, попередньо зробивши бекап :-D Видалимо зайве, попередньо зробивши бекап :-D
 <code bash> <code bash>
Рядок 207: Рядок 207:
 </code> </code>
  
-Створимо основний конфіг +Створимо основний конфіг ''/etc/freeradius/3.0/sites-enabled/nodeny'' з таким вмістом: 
-   nano /etc/freeradius/3.0/sites-enabled/nodeny +<code bash
-з таким вмістом: +cat <<EOT >> /etc/freeradius/3.0/sites-enabled/nodeny
-<code bash /etc/freeradius/3.0/sites-enabled/nodeny>+
 server nodeny { server nodeny {
     listen {     listen {
Рядок 261: Рядок 260:
         perl         perl
     }     }
- 
 } }
 +EOT
 </code> </code>
  
Рядок 272: Рядок 271:
 Опишемо локальний сервер доступу для тестів, сюди ж вписуємо всі свої БРАСи за аналогією Опишемо локальний сервер доступу для тестів, сюди ж вписуємо всі свої БРАСи за аналогією
 <code bash> <code bash>
-echo '' > /etc/freeradius/3.0/clients.conf +cat <<EOT > /etc/freeradius/3.0/clients.conf
-nano /etc/freeradius/3.0/clients.conf +
-</code> +
- +
-<code bash /etc/freeradius/3.0/clients.conf>+
 client 127.0.0.1 { client 127.0.0.1 {
-ipaddr = 127.0.0.1 +    ipaddr = 127.0.0.1 
-secret = hardpass5 +    secret = hardpass5 
-shortname=NoDenyDB +    shortname=NoDenyDB 
-nastype = cisco+    nastype = cisco
 } }
 +EOT
 </code> </code>
  
 <code bash> <code bash>
-echo '' > /etc/freeradius/3.0/users +cat <<EOT > /etc/freeradius/3.0/mods-config/files/authorize
-nano /etc/freeradius/3.0/users +
-</code> +
- +
-<code bash /etc/freeradius/3.0/users>+
 DEFAULT Auth-Type = Perl DEFAULT Auth-Type = Perl
     Fall-Through = yes     Fall-Through = yes
 +EOT
 </code> </code>
  
 <code bash> <code bash>
-echo '' > /etc/freeradius/3.0/mods-enabled/perl +cat <<EOT > /etc/freeradius/3.0/mods-enabled/perl
-nano /etc/freeradius/3.0/mods-enabled/perl +
-</code> +
- +
-<code perl /etc/freeradius/3.0/mods-enabled/perl>+
 perl { perl {
         filename = /usr/local/nodeny/nod/_radius.pl         filename = /usr/local/nodeny/nod/_radius.pl
 } }
 +EOT
 +</code>
 +
 +==== Permission denied ====
 +
 +Оскільки freeradius використовує модулі з директорії білінгу, при запуску можемо отримувати помилку, схожу на наступну
 +<code bash>
 +'Can`t open perl script "/usr/local/nodeny/nod/_radius.pl": Permission denied'
 +'rlm_perl: perl_parse failed: /usr/local/nodeny/nod/_radius.pl not found or has syntax errors'
 +'/etc/freeradius/3.0/mods-enabled/perl[1]: Instantiation failed for module "perl"'
 </code> </code>
  
-Я не знаю чому, але радіус відмовляється працювати з моїм скриптом на дебіані через недостатні права на файл. я перепробував всі комбінації прав та власників на файл, але результат той самий. Єдине, що допомогло, так це змінити в налаштуваннях самого радіусу користувача і групу або взагалі їх закоментувати. Я так і вчинив:+Щоб це виправитинеобхідно змінити користувача запуску freeradius, щоб freeradius міг використовувати файли за межами каталогу своїх конфігурацій
-  +
 <code bash> <code bash>
 nano /etc/freeradius/3.0/radiusd.conf nano /etc/freeradius/3.0/radiusd.conf
 </code> </code>
  
-у секції "securityкоментуємо користувача та групу+У секції 'securityкоментуємо користувача та групу
 <code bash> <code bash>
-#user=freerad +#user = freerad 
-# group = freerad+#group = freerad
 </code> </code>
  
-==== Mysql процедури ====+Також перевизначимо системний юніт 
 +<code bash> 
 +systemctl edit --full freeradius 
 +</code>
  
-<code sql+В ньому потрібно закоментувати рядки де вказано користувача і групу, від імені яких відбувається запуск. 
-ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci;+<code bash
 +#User=freerad 
 +#Group=freerad
 </code> </code>
  
-<code sql+<code bash
-DELIMITER $$ +systemctl daemon-reload 
-CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radcheck`(IN `login` VARCHAR(64)) +service freeradius restart 
-BEGIN +</code>
-  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)) +<code bash> 
-BEGIN +journalctl -xeu freeradius.service 
-  DECLARE usr_id INT; +</code>
-  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_indexINTO usr_ip; +<code bash> 
- +freeradius[240578]: Copyright (C1999-2022 The FreeRADIUS server project and contributors 
-  SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; +freeradius[240578]: There is NO warrantynot even for MERCHANTABILITY or FITNESS FOR A 
-  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='+freeradius[240578]: PARTICULAR PURPOSE 
-  SELECT NULL,login,'Framed-Protocol','PPP','='; +freeradius[240578]: You may redistribute copies of FreeRADIUS under the terms of the 
-END$$ +freeradius[240578]: GNU General Public License 
-DELIMITER ; +freeradius[240578]: For more information about these matterssee the file named COPYRIGHT 
- +freeradius[240578]: Starting - reading configuration files ... 
-DELIMITER $$ +freeradius[240578]: Debugger not attached 
-CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radparam`(IN `login` VARCHAR(64)) +freeradius[240578]: Perl version: 5.36.0 
-BEGIN +freeradius[240578]: Creating attribute Unix-Group 
-  DECLARE usr_id INT; +freeradius[240578]: rlm_detail (auth_log): 'User-Passwordsuppressedwill not appear in detail output 
-  DECLARE real_login VARCHAR(64) DEFAULT NULL; +freeradius[240578]: Compiling Autz-Type Status-Server for attr Autz-Type 
-   +freeradius[240578]: Compiling Auth-Type PAP for attr Auth-Type 
-  IF login REGEXP '[+][0-9]+$' THEN +freeradius[240578]: Compiling Auth-Type Perl for attr Auth-Type 
-  SELECT SUBSTRING_INDEX(login'+', 1) INTO real_login; +freeradius[240578]: radiusd: #### Skipping IP addresses and Ports #### 
-  ELSE SET real_login=login;END IF; +freeradius[240578]: Configuration appears to be OK
- +
-  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 ;+
 </code> </code>
 +
 ==== Завершение установки ==== ==== Завершение установки ====
 <code bash> <code bash>
Рядок 434: Рядок 364:
 </code> </code>
  
 +Не забуваємо налаштувати файрвол
  
 +Перевіряємо використання портів
 +  ss -alun4 | grep -E '1812|1813'
  
- +Бачимо 
- +<code bash> 
-rc.local +UNCONN 0      0          127.0.0.1:18121      0.0.0.0:* 
- +UNCONN 0      0            0.0.0.0:1812       0.0.0.0:* 
-https://softnastroy.com/content/vklyuchaem-rclocal-v-debian-9-stretch.html +UNCONN 0      0            0.0.0.0:1813       0.0.0.0:* 
 +</code>
  
  
 https://wiki.mikbill.pro/billing/bez_deneg https://wiki.mikbill.pro/billing/bez_deneg