Розбіжності
Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Наступна ревізія | Попередня ревізія | ||
debian:nodeny [05/03/2022 01:05] – створено Method | debian:nodeny [09/02/2025 21:32] (поточний) – [Конфігурація] Method | ||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
- | ====== NoDeny Next ====== | + | ====== NoDeny Next ====== |
- | ===== Установка NoDeny | + | ===== Встановлення |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | | + | |
<WRAP center round info 65%> | <WRAP center round info 65%> | ||
- | Установка NoDeny+ на Debian | + | Установка NoDeny+ на Debian мені потрібна, т.к. всі свої сервери я тримаю |
- | К тому же я не использую файрвол билинга, который заточен под FreeBSD | + | До того ж, я не використовую файрвол білінгу, який заточений під FreeBSD |
</ | </ | ||
Рядок 15: | Рядок 11: | ||
- | ===== NoDeny загрузка ===== | + | ===== NoDeny завантаження |
- | **на момент написания статьи есть 3 репозитория:**\\ | + | **на момент написання статті є 3 репозиторії:**\\ |
- | * демоверсия '' | + | * демоверсія '' |
- | * стабильная | + | * стабільна '' |
- | * новая ветка '' | + | * нова |
- | я буду использовать последний, по скольку у меня есть | + | я буду |
- | и так, | + | і так, |
<code bash> | <code bash> | ||
cd /usr/local | cd /usr/local | ||
Рядок 32: | Рядок 28: | ||
</ | </ | ||
- | Ставим пакеты для билинга | + | Ставимо пакети для білінгу |
<code bash> | <code bash> | ||
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 | 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\и другие | + | liqpay\pingserver\та інші |
<code bash> | <code bash> | ||
apt-get install -y libxml-simple-perl libdigest-sha-perl liblwp-useragent-determined-perl libcrypt-ssleay-perl | apt-get install -y libxml-simple-perl libdigest-sha-perl liblwp-useragent-determined-perl libcrypt-ssleay-perl | ||
Рядок 52: | Рядок 48: | ||
cpanm -n Net:: | cpanm -n Net:: | ||
</ | </ | ||
- | |||
===== Web Server ===== | ===== Web Server ===== | ||
- | Установка Apache | + | Встановлення |
<code bash> | <code bash> | ||
apt-get install -yq apache2 | apt-get install -yq apache2 | ||
</ | </ | ||
- | Включаем нужные | + | Включаємо потрібні нам модулі для |
<code bash> | <code bash> | ||
sudo a2enmod ssl rewrite suexec include cgid | sudo a2enmod ssl rewrite suexec include cgid | ||
</ | </ | ||
- | Создадим конфиг вместо дефолтного | + | Створимо конфіг замість дефолтного |
<code bash> | <code bash> | ||
nano / | nano / | ||
</ | </ | ||
- | с таким содержимым | + | з таким |
<code bash> | <code bash> | ||
< | < | ||
ServerAdmin admin@example.com | ServerAdmin admin@example.com | ||
ServerName example.com | ServerName example.com | ||
- | ServerAlias www.example.com | + | ServerAlias |
DocumentRoot / | DocumentRoot / | ||
< | < | ||
AddHandler cgi-script .pl | AddHandler cgi-script .pl | ||
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | ||
+ | CGIPassAuth On | ||
</ | </ | ||
< | < | ||
- | ScriptAlias /cgi-bin/ "/ | + | ScriptAlias |
# | # | ||
DirectoryIndex "/ | DirectoryIndex "/ | ||
Рядок 93: | Рядок 89: | ||
</ | </ | ||
- | Создадим симлинки для билинга | + | Створимо симлінки для білінгу |
<code bash> | <code bash> | ||
rm -fR / | rm -fR / | ||
Рядок 100: | Рядок 96: | ||
</ | </ | ||
- | Выставим права | + | Виставимо права |
<code bash> | <code bash> | ||
perl / | perl / | ||
</ | </ | ||
- | Применяем | + | Застосовуємо свій конфіг |
<code bash> | <code bash> | ||
sudo a2ensite nodeny.conf | sudo a2ensite nodeny.conf | ||
Рядок 111: | Рядок 107: | ||
</ | </ | ||
- | проверим ошибки конфигурации | + | перевіримо |
<code bash> | <code bash> | ||
sudo apache2ctl configtest | sudo apache2ctl configtest | ||
</ | </ | ||
- | Вы должны увидеть следующий результат: | + | Ви повинні побачити наступний результат: |
<code bash> | <code bash> | ||
Syntax OK | Syntax OK | ||
</ | </ | ||
- | Применяем изменения | + | Застосовуємо зміни |
<code bash> | <code bash> | ||
systemctl restart apache2 | systemctl restart apache2 | ||
Рядок 127: | Рядок 123: | ||
</ | </ | ||
- | Открываем порты фаервола | + | (1) Для включення https [[https:// |
- | <code bash> | + | |
- | sudo ufw allow http | + | |
- | sudo ufw allow https | + | |
- | sudo ufw reload | + | |
- | </ | + | |
- | + | ||
- | (1) Для включения https [[https:// | + | |
- | ===== База данных ===== | + | ===== База даних ===== |
<WRAP center round important 100%> | <WRAP center round important 100%> | ||
- | Я не буду | + | Я не використовуватиму |
- | [[https:// | + | [[https:// |
- | А на MariaDB | + | А на Percona |
</ | </ | ||
- | {{section> | + | {{section> |
<code bash> | <code bash> | ||
Рядок 148: | Рядок 137: | ||
</ | </ | ||
- | Создадим базу данных nodeny | + | Створимо базу даних nodeny |
<code mysql> | <code mysql> | ||
create database nodeny; | create database nodeny; | ||
use nodeny; | use nodeny; | ||
- | source / | + | source / |
</ | </ | ||
Рядок 159: | Рядок 148: | ||
===== Install apache2 php phpMyAdmin ===== | ===== Install apache2 php phpMyAdmin ===== | ||
- | {{section> | + | {{section> |
- | {{section> | + | {{section> |
===== Webmin ===== | ===== Webmin ===== | ||
- | {{section> | + | {{section> |
===== FreeRadius ===== | ===== FreeRadius ===== | ||
- | [[https:// | ||
- | |||
<WRAP center round important 100%> | <WRAP center round important 100%> | ||
- | Данный вариант установки не из официальной документации и разработан для нашей сети но может быть портирован и в другие сети! | + | Даний варіант установки не з офіційної документації і розроблений для нашої мережі, але може бути портований і в інші мережі! |
- | Он не имеет | + | Він не має MySQL модуля, |
- | На официальном сайте FreeRadius сказано | + | На офіційному сайті FreeRadius сказано, що rlm_perl продуктивніше rlm_sql. |
- | Использование даного варианта вы делаете на свой страх | + | Використання цього варіанта ви робите на свій страх |
</ | </ | ||
- | |||
- | ==== Установка пакетов ==== | ||
<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 | ||
<code bash> | <code bash> | ||
cp -r / | cp -r / | ||
Рядок 200: | Рядок 184: | ||
nano / | nano / | ||
</ | </ | ||
- | поправим | + | поправимо тут |
- | <code bash > | + | <code bash> |
DEFAULT | DEFAULT | ||
- | # | + | # EAP-Message = * ANY, |
- | State =* ANY, | + | State =* ANY, |
- | Message-Authenticator =* ANY, | + | Message-Authenticator =* ANY, |
- | Error-Cause =* ANY, | + | Error-Cause =* ANY, |
- | Reply-Message =* ANY, | + | Reply-Message =* ANY, |
- | MS-CHAP-Error =* ANY, | + | MS-CHAP-Error = * ANY, |
- | Proxy-State =* ANY | + | Proxy-State =* ANY |
</ | </ | ||
- | Создадим основной конфиг | + | Створимо основний конфіг '' |
- | | + | <code bash> |
- | с таким содержимым: | + | cat <<EOT >> |
- | <code bash | + | |
server nodeny { | server nodeny { | ||
listen { | listen { | ||
Рядок 266: | Рядок 249: | ||
perl | perl | ||
} | } | ||
- | |||
} | } | ||
+ | EOT | ||
</ | </ | ||
- | + | Також, за бажанням, можна завантажити конфіг сервера статистики | |
- | Также, по желанию, можно подгрузить конфиг сервера статистики | + | |
<code bash> | <code bash> | ||
ln -s / | ln -s / | ||
</ | </ | ||
- | Опишем локальный сервер доступа для тестов, сюда же вписываем все свои БРАСы по аналогии | + | Опишемо локальний сервер доступу для тестів, сюди ж вписуємо всі свої БРАСи за аналогією |
<code bash> | <code bash> | ||
- | echo '' | + | cat <<EOT > / |
- | nano / | + | client 127.0.0.1 { |
- | </code> | + | ipaddr = 127.0.0.1 |
- | + | secret = hardpass5 | |
- | <code bash / | + | shortname=NoDenyDB |
- | client | + | nastype = cisco |
- | ipaddr | + | |
- | secret = hardpass5 | + | |
- | shortname = NoDenyDB | + | |
- | 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 / | ||
</ | </ | ||
- | в секции "security" | + | У секції 'security' |
<code bash> | <code bash> | ||
- | # | + | #user = freerad |
- | # | + | #group = freerad |
</ | </ | ||
+ | Також перевизначимо системний юніт | ||
+ | <code bash> | ||
+ | systemctl edit --full freeradius | ||
+ | </ | ||
- | ==== Mysql процедуры ==== | + | В ньому |
+ | <code bash> | ||
+ | #User=freerad | ||
+ | #Group=freerad | ||
+ | </ | ||
- | < | + | < |
- | ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci; | + | systemctl daemon-reload |
+ | service freeradius restart | ||
</ | </ | ||
- | < | + | Перевіряємо |
- | DELIMITER $$ | + | < |
- | CREATE DEFINER=`root`@`localhost` PROCEDURE `p5_radcheck`(IN `login` VARCHAR(64)) | + | journalctl -xeu freeradius.service |
- | 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 | + | freeradius[240578]: |
- | DECLARE usr_id INT; | + | freeradius[240578]: |
- | | + | freeradius[240578]: |
- | | + | freeradius[240578]: |
- | | + | freeradius[240578]: |
- | + | freeradius[240578]: | |
- | SELECT SUBSTRING_INDEX(login, ' | + | freeradius[240578]: Starting - reading configuration files ... |
- | IF login REGEXP '[+][0-9]+$' THEN | + | freeradius[240578]: Debugger not attached |
- | SELECT CAST(REPLACE(REPLACE(login, | + | freeradius[240578]: |
- | ELSE SET ip_index=0; | + | freeradius[240578]: |
- | + | freeradius[240578]: rlm_detail | |
- | | + | freeradius[240578]: |
- | | + | freeradius[240578]: |
- | CALL set_auth(ip, | + | freeradius[240578]: |
- | END$$ | + | freeradius[240578]: |
- | DELIMITER ; | + | freeradius[240578]: Configuration appears to be OK |
+ | </ | ||
- | 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, | ||
- | | ||
- | 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> | ||
Рядок 441: | Рядок 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:// |