Розбіжності
Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія Наступна ревізія | Попередня ревізія | ||
debian:nodeny [20/06/2022 06:22] – [Встановлення NoDeny Nex на Debian] Method | debian:nodeny [09/02/2025 21:32] (поточний) – [Конфігурація] Method | ||
---|---|---|---|
Рядок 74: | Рядок 74: | ||
AddHandler cgi-script .pl | AddHandler cgi-script .pl | ||
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | ||
+ | CGIPassAuth On | ||
</ | </ | ||
< | < | ||
Рядок 120: | Рядок 121: | ||
systemctl restart apache2 | systemctl restart apache2 | ||
systemctl status apache2 | systemctl status apache2 | ||
- | </ | ||
- | |||
- | Відкриваємо порти фаєрволу | ||
- | <code bash> | ||
- | sudo ufw allow http | ||
- | sudo ufw allow https | ||
- | sudo ufw reload | ||
</ | </ | ||
Рядок 133: | Рядок 127: | ||
===== База даних ===== | ===== База даних ===== | ||
<WRAP center round important 100%> | <WRAP center round important 100%> | ||
- | Я не використовуватиму MySQL, оскільки з білінгом чудово працює і MariaDB! | + | Я не використовуватиму MySQL, оскільки з білінгом чудово працює і Percona server for mysql 8! |
[[https:// | [[https:// | ||
- | А на MariaDB | + | А на Percona |
</ | </ | ||
- | {{section> | + | {{section> |
<code bash> | <code bash> | ||
Рядок 163: | Рядок 157: | ||
===== FreeRadius ===== | ===== FreeRadius ===== | ||
- | [[https:// | ||
- | |||
<WRAP center round important 100%> | <WRAP center round important 100%> | ||
Даний варіант установки не з офіційної документації і розроблений для нашої мережі, | Даний варіант установки не з офіційної документації і розроблений для нашої мережі, | ||
Рядок 172: | Рядок 164: | ||
</ | </ | ||
- | |||
- | ==== Встановлення пакетів ==== | ||
<code bash> | <code bash> | ||
apt-get install freeradius freeradius-mysql freeradius-utils | apt-get install freeradius freeradius-mysql freeradius-utils | ||
- | | + | |
- | sudo ufw allow to any port 1812 proto udp | + | apt-mark hold freeradius |
- | sudo ufw allow to any port 1813 proto udp | + | |
- | sudo ufw reload | + | |
</ | </ | ||
+ | ==== Конфігурація ==== | ||
Видалимо зайве, попередньо зробивши бекап :-D | Видалимо зайве, попередньо зробивши бекап :-D | ||
<code bash> | <code bash> | ||
Рядок 207: | Рядок 196: | ||
</ | </ | ||
- | Створимо основний конфіг | + | Створимо основний конфіг |
- | | + | <code bash> |
- | з таким вмістом: | + | cat <<EOT >> |
- | <code bash / | + | |
server nodeny { | server nodeny { | ||
listen { | listen { | ||
Рядок 261: | Рядок 249: | ||
perl | perl | ||
} | } | ||
- | |||
} | } | ||
+ | EOT | ||
</ | </ | ||
Рядок 272: | Рядок 260: | ||
Опишемо локальний сервер доступу для тестів, | Опишемо локальний сервер доступу для тестів, | ||
<code bash> | <code bash> | ||
- | echo '' | + | cat <<EOT > / |
- | nano / | + | |
- | </code> | + | |
- | + | ||
- | <code bash / | + | |
client 127.0.0.1 { | client 127.0.0.1 { | ||
- | ipaddr = 127.0.0.1 | + | |
- | secret = hardpass5 | + | secret = hardpass5 |
- | shortname=NoDenyDB | + | shortname=NoDenyDB |
- | nastype = cisco | + | nastype = cisco |
} | } | ||
+ | EOT | ||
</ | </ | ||
<code bash> | <code bash> | ||
- | echo '' | + | cat << |
- | nano /etc/freeradius/ | + | |
- | </ | + | |
- | + | ||
- | <code bash / | + | |
DEFAULT Auth-Type = Perl | DEFAULT Auth-Type = Perl | ||
Fall-Through = yes | Fall-Through = yes | ||
+ | EOT | ||
</ | </ | ||
<code bash> | <code bash> | ||
- | echo '' | + | cat << |
- | nano / | + | |
- | </code> | + | |
- | + | ||
- | <code perl / | + | |
perl { | perl { | ||
filename = / | filename = / | ||
} | } | ||
+ | EOT | ||
</ | </ | ||
- | Я не знаю чому, але радіус відмовляється працювати з моїм скриптом | + | ==== Permission denied ==== |
- | | + | |
+ | Оскільки freeradius | ||
+ | <code bash> | ||
+ | 'Can`t open perl script "/ | ||
+ | ' | ||
+ | '/ | ||
+ | </ | ||
+ | |||
+ | Щоб це виправити, необхідно змінити | ||
<code bash> | <code bash> | ||
nano / | nano / | ||
</ | </ | ||
- | у секції | + | У секції |
<code bash> | <code bash> | ||
- | # | + | #user = freerad |
- | # group = freerad | + | #group = freerad |
</ | </ | ||
- | ==== Mysql процедури ==== | + | Також |
+ | <code bash> | ||
+ | systemctl edit --full freeradius | ||
+ | </ | ||
- | < | + | В ньому потрібно закоментувати рядки де вказано користувача і групу, від імені яких відбувається запуск. |
- | ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci; | + | < |
+ | # | ||
+ | # | ||
</ | </ | ||
- | < | + | < |
- | DELIMITER $$ | + | systemctl daemon-reload |
- | CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radcheck`(IN `login` VARCHAR(64)) | + | service freeradius restart |
- | BEGIN | + | </ |
- | DECLARE real_login VARCHAR(64) DEFAULT NULL; | + | |
- | SELECT SUBSTRING_INDEX(login, | + | |
- | SELECT id, name, ' | + | |
- | FROM users WHERE name=real_login; | + | |
- | END$$ | + | |
- | DELIMITER ; | + | |
- | DELIMITER $$ | + | Перевіряємо |
- | CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radupdate`(IN `login` VARCHAR(64), | + | <code bash> |
- | BEGIN | + | journalctl |
- | 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, | + | |
- | IF login REGEXP '[+][0-9]+$' THEN | + | |
- | SELECT CAST(REPLACE(REPLACE(login, | + | |
- | ELSE SET ip_index=0; | + | |
- | + | ||
- | SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; | + | |
- | SELECT get_ip_by_num(usr_id, | + | |
- | CALL set_auth(ip, | + | |
- | END$$ | + | |
- | DELIMITER ; | + | |
- | DELIMITER $$ | + | Маємо побачити щось схоже на наступне |
- | CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radreply`(IN `login` VARCHAR(64)) | + | <code bash> |
- | BEGIN | + | freeradius[240578]: |
- | DECLARE usr_id INT; | + | freeradius[240578]: |
- | | + | freeradius[240578]: |
- | | + | freeradius[240578]: |
- | | + | freeradius[240578]: |
+ | freeradius[240578]: | ||
+ | freeradius[240578]: | ||
+ | freeradius[240578]: | ||
+ | freeradius[240578]: | ||
+ | freeradius[240578]: | ||
+ | freeradius[240578]: | ||
+ | freeradius[240578]: | ||
+ | freeradius[240578]: | ||
+ | freeradius[240578]: | ||
+ | freeradius[240578]: | ||
+ | freeradius[240578]: | ||
+ | </ | ||
- | SELECT SUBSTRING_INDEX(login, | ||
- | | ||
- | IF login REGEXP ' | ||
- | SELECT CAST(REPLACE(REPLACE(login, | ||
- | ELSE SET ip_index=0; | ||
- | |||
- | SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; | ||
- | SELECT get_ip_by_num1(usr_id, | ||
- | |||
- | SELECT NULL, | ||
- | SELECT NULL, | ||
- | SELECT NULL, | ||
- | 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 ' | ||
- | SELECT SUBSTRING_INDEX(login, | ||
- | ELSE SET real_login=login; | ||
- | |||
- | 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=' | ||
- | END$$ | ||
- | DELIMITER ; | ||
- | |||
- | DELIMITER $$ | ||
- | CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radtraf`(IN `login` VARCHAR(64), | ||
- | BEGIN | ||
- | DECLARE usr_id INT; | ||
- | DECLARE t_in BIGINT; | ||
- | DECLARE t_out BIGINT; | ||
- | DECLARE real_login VARCHAR(64) DEFAULT NULL; | ||
- | | ||
- | IF login REGEXP ' | ||
- | SELECT SUBSTRING_INDEX(login, | ||
- | ELSE SET real_login=login; | ||
- | |||
- | 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, | ||
- | ON DUPLICATE KEY UPDATE traf_in=trafin, | ||
- | SET @s = CONCAT(' | ||
- | 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 bash> | <code bash> | ||
Рядок 434: | Рядок 353: | ||
</ | </ | ||
+ | Не забуваємо налаштувати файрвол | ||
+ | Перевіряємо використання портів | ||
+ | ss -alun4 | grep -E ' | ||
- | + | Бачимо | |
- | + | <code bash> | |
- | rc.local | + | UNCONN 0 0 127.0.0.1: |
- | + | UNCONN 0 0 0.0.0.0: | |
- | https:// | + | UNCONN 0 0 0.0.0.0:1813 0.0.0.0:* |
+ | </ | ||
https:// | https:// |