Установка NoDeny: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
мНемає опису редагування
 
(Не показано 138 проміжних версій цього користувача)
Рядок 1: Рядок 1:
== Вступление ==
= Intro =


Устанавливаем по такой схеме:
Устанавливаем по такой схеме:


* Сначала настраиваем сервер так, чтобы он работал без NoDeny, т.е. предоставлял абонентам доступ в интернет: выполнял функции  NAS, маршрутизации и локального DNS
* Сначала настраиваем сервер так, чтобы он работал без NoDeny, т.е. предоставлял абонентам доступ в интернет: выполнял функции  NAT, маршрутизации и локального DNS
* Настроим веб-интерфейс NoDeny
* Настраиваем веб-интерфейс NoDeny
* Настроим серверные скрипты NoDeny
* Настраиваем серверные скрипты NoDeny


=== Установка ===
Предпочитаемой системой для NoDeny является FreeBSD. Эта система во многом похожа на Lunux. Если вы сталкиваетесь  с  FreeBSD впервые, то обратите внимание на используемый редактор в этой системе: '''ee'''. Выход из редактора осуществляется по клавише  ESC, затем «a», затем снова «a»
При установке можно выбирать рекомендуемые параметры, т.е. на все вопросы нажимаем enter. Обращаем внимание на такие вещи:
<br><br>


* На вопрос "Would you like to add users to the installed system now?" отвечаем Yes и создаем пользователя. При этом на вопрос Login Group вводим 0 (ноль) - тогда наш пользователь сможет стать root с помощью команды su
=Установка и настройка сервера=


===После установки и перезагрузки===
[[Install NoDeny on Ubuntu server 22.04|Для Ubuntu server 22.04]]
 
Ниже описана установка на FreeBSD
 
==Устанавливаем операционную систему==
 
Загружаем с [https://www.freebsd.org/where.html офсайта] образ FreeBSD под архитектуру amd64 или i386 в зависимости от типа процессора вашего сервера. Обратите внимание, что amd64 означает не процессор amd, а архитектуру, если у вас 64 разрядный intel - скорее всего нужно выбирать архитектуру  amd64. Версию желательно выбирать stable.
 
При установке можно выбирать рекомендуемые параметры, т.е. на все вопросы нажимать enter. На вопрос "Would you like to add users to the installed system now?" отвечаем Yes и создаем пользователя. При этом на вопрос Login Group вводим wheel - тогда наш пользователь сможет стать root с помощью команды su.
 
Минутное видео инсталляции системы FreeBSD:
 
<youtube>oID6BFzxcr0</youtube>
 
==После установки и перезагрузки==


Если мы настраиваем тестовый сервер, то скорее всего выбрали получение ip по dhcp. Логинимся на сервер и выясняем какой ip он получил:
Если мы настраиваем тестовый сервер, то скорее всего выбрали получение ip по dhcp. Логинимся на сервер и выясняем какой ip он получил:
Рядок 42: Рядок 56:
</pre>
</pre>


* background_fsck="NO" отключает проверку дисков в бекграунде и делает при старте, fsck_y_enable="YES" говорит «yes» на все вопросы при проверке.
<div class="mw-collapsible mw-collapsed" style="overflow: hidden" data-expandtext="Объяснить что мы сделали" data-collapsetext="Скрыть">
* background_fsck="NO" отключает проверку дисков в бекграунде и делает ее при старте, fsck_y_enable="YES" говорит «yes» на все вопросы при проверке.
* 1.1.1.1 - виртуальный ip, который автор настраивает на всех своих серверах на интерфейсе lo0. Этот ip клиенты указывают в своих настройках в качестве dns сервера, сервера авторизации и т.д.
* 1.1.1.1 - виртуальный ip, который автор настраивает на всех своих серверах на интерфейсе lo0. Этот ip клиенты указывают в своих настройках в качестве dns сервера, сервера авторизации и т.д.
* local_unbound_enable="YES" - автозапуск локального DNS
</div>


Копируем следующий текст и выполняем на сервере одним блоком:
Копируем следующий текст и выполняем на сервере в командной строке одним блоком:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Рядок 55: Рядок 72:
echo 'dummynet_load="YES"' >> /boot/loader.conf
echo 'dummynet_load="YES"' >> /boot/loader.conf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf
ifconfig lo0 alias 1.1.1.1 netmask 255.255.255.255
</syntaxhighlight>
</syntaxhighlight>


===Устанавливаем пакетный менеджер PKGNG===
<div style='display:none'>
Устанавливаем пакетный менеджер PKGNG==


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Рядок 73: Рядок 92:
pkg update -f
pkg update -f
</syntaxhighlight>
</syntaxhighlight>
</div>


===Устанавливаем необходимые программы===
==Устанавливаем необходимые пакеты==


Устанавить perl можно довольно быстро  
<div style='display:none'>
<syntaxhighlight lang="bash">
Установить perl можно довольно быстро  
<source lang="bash">
pkg install perl5
pkg install perl5
</syntaxhighlight>
</source>


Но автор на всякий случай устанавливает из портов, чтобы удостовериться, что perl будет собран с опцей «THREADS - Build threaded perl» - не забудьте проверить это когда будет выведен список опций:
Но автор на всякий случай устанавливает из портов, чтобы удостовериться, что perl будет собран с опцией «THREADS - Build threaded perl» - не забудьте проверить это когда будет выведен список опций:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cd /usr/ports/lang/perl5.18/
cd /usr/ports/lang/perl5.20/
make install clean
make install clean
</syntaxhighlight>
</syntaxhighlight>


<syntaxhighlight lang="bash">
Ставим необходимые приложения
ln -s /usr/local/bin/perl /usr/bin/perl 2> /dev/null
</div>
</syntaxhighlight>
 
Ставим bash, svn и mc.


<syntaxhighlight lang="bash">
<source lang="bash">
pkg install bash subversion mc-light sudo
pkg install perl5 bash subversion mc sudo
</syntaxhighlight>
</source>


Назначаем bash дефолтным для учетной записи root:
Назначаем bash дефолтным для учетной записи root:


<syntaxhighlight lang="bash">
<source lang="bash">
pw usermod root -s /usr/local/bin/bash
pw usermod root -s /usr/local/bin/bash
</syntaxhighlight>
</source>
 
Добавим возможность по sudo переключаться на root без ввода пароля:
 
<source lang="bash">
echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /usr/local/etc/sudoers
</source>


=== Загружаем NoDeny+ ===
В дальнейшем вместо  «su» можно вводить «sudo bash» без ввода пароля


==Загружаем NoDeny+==
Для NoDeny plus:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cd /usr/local
cd /usr/local
Рядок 111: Рядок 137:
</syntaxhighlight>
</syntaxhighlight>


===Настраиваем nat===
Для NoDeny next:
<syntaxhighlight lang="bash">
cd /usr/local
svn co svn://nodeny-plus.com.ua/release/next nodeny
</syntaxhighlight>
 
==Настраиваем nat==


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Рядок 121: Рядок 153:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
kldload pf
pfctl -N -f /etc/pf.conf
pfctl -N -f /etc/pf.conf
</syntaxhighlight>
</syntaxhighlight>


Игнорируем
Игнорируем следующие ошибки:
 
<pre>
<pre>
No ALTQ support in kernel
No ALTQ support in kernel
Рядок 131: Рядок 163:
</pre>
</pre>


===Настраиваем локальный dns===
==Настраиваем локальный dns==


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
sysrc local_unbound_enable=YES
/etc/rc.d/local_unbound quietstart
ee /var/unbound/unbound.conf  
ee /var/unbound/unbound.conf  
</syntaxhighlight>
</syntaxhighlight>
Рядок 148: Рядок 182:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
unbound-checkconf
/etc/rc.d/local_unbound configtest
</syntaxhighlight>
</syntaxhighlight>


Рядок 156: Рядок 190:
unbound-checkconf: no errors in /var/unbound/unbound.conf
unbound-checkconf: no errors in /var/unbound/unbound.conf
</pre>
</pre>
Стартуем dns:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Рядок 169: Рядок 201:
</syntaxhighlight>
</syntaxhighlight>


=== Проверяем, что клиенты получают доступ в интернет===
Смотрим внимательно в ответ - в нем должен присутствовать ip адрес nodeny.com.ua
 
==Проверяем, что клиенты получают доступ в интернет==


На данном этапе сервер может выполнять свои функции без NoDeny, т.е. давать абонентам доступ в интернет. Пробуем с клиентского компьютера пропинговать 8.8.8.8. Если не пингуется:
На данном этапе сервер может выполнять свои функции без NoDeny, т.е. давать абонентам доступ в интернет. Пробуем с клиентского компьютера пропинговать 8.8.8.8. Если не пингуется, на сервере запускаем tcpdump (где fxp1 - интерфейс на вышестоящего провайдера):


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Рядок 181: Рядок 215:
На клиентском компьютере в качестве DNS устанавливаем 1.1.1.1 (наш локальный). Проверяем ping ya.ru
На клиентском компьютере в качестве DNS устанавливаем 1.1.1.1 (наш локальный). Проверяем ping ya.ru


===Устанавливаем MySQL-сервер===


<syntaxhighlight lang="bash">
pkg install mysql56-server
</syntaxhighlight>


Создаем конфиг


<syntaxhighlight lang="bash">
<p></p>
ee /etc/my.cnf
 
</syntaxhighlight>
=Настраиваем NoDeny=


Редактируем my.cnf
==Устанавливаем MySQL-сервер==


<pre>
<source lang="bash">
[mysqld]
pkg install mysql80-server
skip-networking
mkdir /var/db/mysql_tmpdir/
character-set-server=utf8
chown mysql /var/db/mysql_tmpdir/
init-connect="SET NAMES utf8"
</source>
query_cache_size=64M
long_query_time=5
slow_query_log=1
slow_query_log_file=/var/db/mysql/slow.log
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8


[client]
Автозапуск при старте системы
default-character-set=utf8


[mysql]
<source lang="bash">
default-character-set=utf8
sysrc mysql_enable=YES
</pre>
</source>


Стартуем mysql-сервер
Стартуем mysql-сервер


<syntaxhighlight lang="bash">
<source lang="bash">
/usr/local/etc/rc.d/mysql-server forcestart
service mysql-server start
</syntaxhighlight>
</source>
 
Устанавливаем пароль root в mysql
 
<syntaxhighlight lang="bash">
mysqladmin -u root password 'hardpass'
</syntaxhighlight>
 
Автозапуск при старте системы


<syntaxhighlight lang="bash">
echo mysql_enable=YES >> /etc/rc.conf
</syntaxhighlight>


Создаем структуру БД NoDeny+
Создаем структуру БД NoDeny+


<syntaxhighlight lang="bash">
<source lang="bash">
mysql -u root --password='hardpass'
mysql -u root
</syntaxhighlight>
</source>


Выполняем в консоли mysql:
Выполняем в консоли mysql:


<pre>
<pre>
ALTER USER 'root'@'localhost' IDENTIFIED BY 'hardpass';
create database nodeny;
create database nodeny;
use nodeny;
use nodeny;
Рядок 247: Рядок 258:
</pre>
</pre>


Выходим:
Кроме создания структуры БД NoDeny+, мы изменили root пароль для mysql на hardpass. Измените его на иной если это не тестовая инсталляция. Выходим:


<pre>
<pre>
Рядок 253: Рядок 264:
</pre>
</pre>


===Устанавливаем Web-сервер===
==Perl-модуль для MySQL==
 
<syntaxhighlight lang="bash">
pkg install p5-DBD-mysql
</syntaxhighlight>
 
Если появится сообщение типа такого:
<pre>
Installed packages to be REMOVED:
    mysql80-client: 8.0.31
</pre>


Это означает, что в пакетах perl-модуль не работает с mysql версии 8. Надо прервать установку и устанавить из портов:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
portsnap fetch
portsnap extract
cd /usr/ports/databases/p5-DBD-mysql/ && make install clean
</syntaxhighlight>
==Устанавливаем Web-сервер==
<source lang="bash">
pkg install apache24
pkg install apache24
</syntaxhighlight>
</source >


Автозапуск
Автозапуск


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
echo apache24_enable=YES >> /etc/rc.conf
sysrc apache24_enable=YES
</syntaxhighlight>
</syntaxhighlight>
Подправим конфиг


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
sed -i '' '1 s/.*/LoadModule cgi_module libexec\/apache24\/mod_cgi.so/' /usr/local/etc/apache24/httpd.conf
echo 'ServerName 0.0.0.0:80' >> /usr/local/etc/apache24/httpd.conf
echo 'ServerName 0.0.0.0:80' >> /usr/local/etc/apache24/httpd.conf
</syntaxhighlight>
</syntaxhighlight>
Рядок 288: Рядок 321:




==Установка веб-интерфейса NoDeny+==
 
<p></p>
 
=Установка веб-интерфейса NoDeny+=
 
<syntaxhighlight lang="bash">
pkg install p5-Crypt-Rijndael p5-Net-ARP p5-JSON p5-JSON-XS p5-LWP-Protocol-https p5-CGI
</syntaxhighlight>


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
pkg install p5-DBD-mysql p5-Crypt-Rijndael net/p5-Net-ARP p5-JSON p5-JSON-XS
ln -s /usr/local/bin/perl /usr/bin/perl > /dev/null
</syntaxhighlight>
</syntaxhighlight>


Рядок 319: Рядок 359:
</pre>
</pre>


Если в левом верхнем углу появится эмблема NoDeny+, то заходим в настройки и устанавливаем в «да» параметр «установите "да" если путь к изображениям корректен»


Переходим по ссылке с логином текущего администратора в верхнем меню, в нашем случае «admin». Далее по ссылке «Администраторы» и меняем пароль своей учетке, а также выдаем все привилегии.
'''Если в левом верхнем углу появится эмблема NoDeny+, то заходим в настройки и устанавливаем в «да» параметр «установите "да" если путь к изображениям корректен»'''
 
 
Изменяем следующие настройки:
 
* Тарификация → Денежная еденица
* Доп.поля. Удалите поля, которые не потребуются для данных ваших клиентов и добавьте нужные. Например, если вам необходимо поле «Город», то следует создать запись:
** Имя поля: Город
** Имя поля в бд: _adr_city
** Тип поля: выпадающий список
** Тип объекта: city
 
В настройках в разделе «Администраторы» меняем пароль своей учетке, а также выдаем все привилегии.


Изменяем следующие настройки
Тарификация → Денежная еденица
Объекты. Внесите несколько основных улиц вашей сети.
Доп.поля. Удалите поля, которые не потребуются для данных ваших клиентов и добавьте нужные. Например, если вам необходимо поле «Город», то вам необходимо создать запись:
Имя поля: Город
Имя поля в бд: _adr_city
Тип поля: выпадающий список
Регулярное выражение: city
После этого, вам необходимо зайти в настройках в раздел «Объекты» и внести несколько городов, установив параметр «Тип» в значение «city».
Создаем клиентскую учетную запись, после чего устанавливаем в значение «Всегда онлайн» параметр «Авторизация» - это позволит клиенту получить доступ в интернет без авторизации вначале тестирования. Также добавляем ip и услугу «1 Мбит».
Создаем клиентскую учетную запись, после чего устанавливаем в значение «Всегда онлайн» параметр «Авторизация» - это позволит клиенту получить доступ в интернет без авторизации вначале тестирования. Также добавляем ip и услугу «1 Мбит».
Запуск ядра NoDeny+


Ядро NoDeny+ работает в фоне и выполняет следующие функции: обработка авторизаций, сбор статистики трафика, управление услугами и т.д. Конфиги находятся в файлах /usr/local/nodeny/kernel/*.cfg. Обязательный параметр run - указывает будет ли плагин запущен при старте ядра или нет. Если run установлен в 0, то плагин можно запустить только указав его в параметрах командной строки при запуске ядра.


Получим список всех плагинов
 
<p></p>
 
=Запуск ядра NoDeny+=
 
Ядро NoDeny+ работает в фоне и выполняет следующие функции: обработка авторизаций, сбор статистики трафика, управление услугами и т.д. Конфиги находятся в файлах /usr/local/nodeny/kernel/*.cfg.
 
Получим список всех установленных модулей:
 
<syntaxhighlight lang="bash">
cd /usr/local/nodeny
perl nokernel.pl -L
perl nokernel.pl -L
Напротив названия модуля 1 означает, что модуль будет запускаться автоматически при старте ядра.
</syntaxhighlight>
 
Напротив названия модуля YES означает, что модуль будет запускаться автоматически при старте ядра. Если же нет, то мы можем запустить модуль в отдельном потоке с помощью ключа -m.


Запускаем ядро со стандартным набором модулей
Запускаем ядро со стандартным набором модулей
<syntaxhighlight lang="bash">
perl nokernel.pl
perl nokernel.pl
</syntaxhighlight>
Если на консоль не вывело никаких ошибок - ядро успешно запустило все модули.
Если на консоль не вывело никаких ошибок - ядро успешно запустило все модули.


Запускаем скрипт управления фаерволом
Запускаем скрипт управления фаерволом
<syntaxhighlight lang="bash">
perl noserver.pl -v
perl noserver.pl -v
</syntaxhighlight>
Если на консоль не вывело никаких ошибок - ставим в автозагрузку:
Если на консоль не вывело никаких ошибок - ставим в автозагрузку:


<syntaxhighlight lang="bash">
echo '/usr/bin/perl /usr/local/nodeny/nokernel.pl -d &' >> /etc/rc.local
echo '/usr/bin/perl /usr/local/nodeny/nokernel.pl -d &' >> /etc/rc.local
echo '/usr/bin/perl /usr/local/nodeny/noserver.pl -d &' >> /etc/rc.local
echo '/usr/bin/perl /usr/local/nodeny/noserver.pl -d &' >> /etc/rc.local
</syntaxhighlight>
Запускаем скрипты в фоне
Запускаем скрипты в фоне
<source lang="bash">
perl /usr/local/nodeny/nokernel.pl -d &
perl /usr/local/nodeny/nokernel.pl -d &
perl /usr/local/nodeny/noserver.pl -d &
perl /usr/local/nodeny/noserver.pl -d &
</source>
==Настройка фаервола==
<source lang="bash">
cp /usr/local/nodeny/etc/rc.firewall /etc/
ee /etc/rc.firewall
</source>
Редактируем rc.firewall, меняем внешний интерфейс:
<pre>
ifOut='fxp1'
</pre>
Если мы будем осуществлять подсчет трафика, раскомментируем строчку:
<pre>
#use_ipcad_divert=YES
</pre>
и установим программу сбора трафика ipcad:
<source lang="bash">
pkg install ipcad
</source>
В автозагрузку:
<source lang="bash">
echo ipcad_enable=YES >> /etc/rc.conf
cp /usr/local/nodeny/etc/ipcad.conf /usr/local/etc/
ipcad -d
</source>
В автозагрузку модуль NoDeny подсчета трафика:
<source lang="bash">
echo '/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=collectors -d &' >> /etc/rc.local
</source>
==Проверим, что все сделали правильно==
Перезагружаем сервер:
<source lang="bash">
reboot
</source>
Логинимся. Проверяем, что запущены скрипты NoDeny:
<source lang="bash">
ps ax | grep nodeny | grep pl | grep -v grep
</source>
Должны получить в ответ примерно следующее:
<pre>
659 v0- S    0:00.98 /usr/bin/perl /usr/local/nodeny/noserver.pl -d
660 v0- S    0:01.36 /usr/bin/perl /usr/local/nodeny/nokernel.pl -d
661 v0- S    0:00.99 /usr/bin/perl /usr/local/nodeny/nokernel.pl -m=collectors -d
</pre>
Здесь видно, что запущен модуль управления фаерволом (noserver) и ядро NoDeny (nokernel). Также запущено второе ядро NoDeny с запуском модуля подсчета трафика (-m=collectors). Как было сказано, все модули, которые при perl nokernel.pl -L выдают YES, запускаются при обычном старте nokernel (все вместе в одном потоке). Поскольку сбор трафика довольно нагруженный процесс и может требовать много памяти - автор рекомендует запускать его отдельным процессом ядра.
Проверяем запущен ли ipcad (если используем подсчет трафика):
<source lang="bash">
ps ax | grep ipcad | grep -v grep
</source>
Проверяем состояние фаервола:
<source lang="bash">
ipfw list
</source>
Он должен частично соответствовать содержимому файла /etc/rc.firewall. Если мы используем подсчет трафика, то проверяем существование строки 420 и что в ней есть команда divert
Можно проверить правильно ли идет управление фаерволом, выдается скорость и считается трафик. Для этого на тестовом, компьютере, подключенном к настраиваемому серверу,  пропишите статический ip.  В админке создайте учетную запись абонента (на титульной странице кнопка «создать»), установите ей параметры:
* отключать ли по балансу = «нет»
* авторизация = «всегда онлайн»
* добавьте ip  и тариф для доступа в интернет
На тестовом компьютере через несколько секунд должен появиться доступ в интернет.
<div class="mw-collapsible mw-collapsed" style="overflow: hidden" data-expandtext="Если интернет не появился" data-collapsetext="Скрыть">
Если интернет не появился, проверим, что скрипт управления фаерволом дал указание фаерволу пропустить абонента:
<source lang="bash">
ipfw table 21 list
</source>
В списке должен быть ip абонента и какое-то число. Если нет, то запустим скрипт управления фаерволом с выводом информации в консоль:
<source lang="bash">
perl /usr/local/nodeny/noserver.pl -v
</source>
Не забывайте условия доступа в интенет:
* в настройках абонента должен быть привязан ip к его учетной записи
* должен быть выдан тариф с доступом в интернет
* абонент должен быть авторизован (пока мы до этого не дошли) либо же его параметр авторизация должен быть «всегда онлайн»
</div>


Настройка авторизации клиентов
==Настройка авторизации клиентов==


На этом этапе необходимо определиться с технологией подключения и авторизации абонентов. Наиболее распространо:
На этом этапе необходимо определиться с технологией подключения и авторизации абонентов. Наиболее распространено:


ipoe + dhcp: удобен для абонентов - не нужно ничего настраивать на компьютере. Однако низкая безопасноть т.к. злоумышленник может подделать свой mac-адрес и пользоваться интернетом за чужой счет
* [[dhcp|ipoe + dhcp]]: удобен для абонентов - не нужно ничего настраивать на компьютере. Однако низкая безопасность т.к. злоумышленник может подделать свой мак-адрес и пользоваться интернетом за чужой счет
ipoe + dhcp + option82: удобен для абонентов - не нужно ничего настраивать на компьютере. Хорошая безопасность. Однако требует установку управляемых свичей и их настройку.
* ipoe + dhcp + option82: удобен для абонентов - не нужно ничего настраивать на компьютере. Хорошая безопасность. Однако требует установки управляемых свичей и их настройку.
pppoe: относительно сложен для клиентов. Безопасность лучше чем при dhcp. Небольшое уменьшение пропускной способности внутри сети из-за пересылки дополнительных данных в pppoe протоколе.
* pppoe: относительно сложен для клиентов. Безопасность лучше чем при dhcp. Небольшое уменьшение пропускной способности внутри сети из-за пересылки дополнительных данных в pppoe протоколе.

Поточна версія на 07:48, 25 липня 2023

Intro

Устанавливаем по такой схеме:

  • Сначала настраиваем сервер так, чтобы он работал без NoDeny, т.е. предоставлял абонентам доступ в интернет: выполнял функции NAT, маршрутизации и локального DNS
  • Настраиваем веб-интерфейс NoDeny
  • Настраиваем серверные скрипты NoDeny

Предпочитаемой системой для NoDeny является FreeBSD. Эта система во многом похожа на Lunux. Если вы сталкиваетесь с FreeBSD впервые, то обратите внимание на используемый редактор в этой системе: ee. Выход из редактора осуществляется по клавише ESC, затем «a», затем снова «a»

Установка и настройка сервера

Для Ubuntu server 22.04

Ниже описана установка на FreeBSD

Устанавливаем операционную систему

Загружаем с офсайта образ FreeBSD под архитектуру amd64 или i386 в зависимости от типа процессора вашего сервера. Обратите внимание, что amd64 означает не процессор amd, а архитектуру, если у вас 64 разрядный intel - скорее всего нужно выбирать архитектуру amd64. Версию желательно выбирать stable.

При установке можно выбирать рекомендуемые параметры, т.е. на все вопросы нажимать enter. На вопрос "Would you like to add users to the installed system now?" отвечаем Yes и создаем пользователя. При этом на вопрос Login Group вводим wheel - тогда наш пользователь сможет стать root с помощью команды su.

Минутное видео инсталляции системы FreeBSD:

После установки и перезагрузки

Если мы настраиваем тестовый сервер, то скорее всего выбрали получение ip по dhcp. Логинимся на сервер и выясняем какой ip он получил:

ifconfig

Далее удобнее выполнять настройку по ssh. Логинимся по ssh под созданным логином и становимся root-ом:

su

Настраиваем rc.conf

ee /etc/rc.conf

Добавляем в rc.conf

ifconfig_lo0_alias0="inet 1.1.1.1 netmask 255.255.255.255"
fsck_y_enable="YES"
background_fsck="NO"
firewall_enable="YES"
gateway_enable="YES"
local_unbound_enable="YES"
  • background_fsck="NO" отключает проверку дисков в бекграунде и делает ее при старте, fsck_y_enable="YES" говорит «yes» на все вопросы при проверке.
  • 1.1.1.1 - виртуальный ip, который автор настраивает на всех своих серверах на интерфейсе lo0. Этот ip клиенты указывают в своих настройках в качестве dns сервера, сервера авторизации и т.д.
  • local_unbound_enable="YES" - автозапуск локального DNS

Копируем следующий текст и выполняем на сервере в командной строке одним блоком:

echo '/sbin/ipfw add 100 allow ip from any to any' > /etc/rc.firewall
echo 'pf_load="YES"' >> /boot/loader.conf
echo 'pf_enable="YES"' >> /etc/rc.conf
echo 'ipfw_load="YES"' >> /boot/loader.conf
echo 'ipdivert_load="YES"' >> /boot/loader.conf
echo 'dummynet_load="YES"' >> /boot/loader.conf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf
ifconfig lo0 alias 1.1.1.1 netmask 255.255.255.255

Устанавливаем пакетный менеджер PKGNG==

/usr/sbin/pkg

На вопрос отвечаем «y»

pkg2ng
echo 'WITH_PKGNG="yes"' >> /etc/make.conf
echo 'daily_backup_pkgdb_enable="NO"' >> /etc/periodic.conf
cp /usr/local/etc/pkg.conf.sample /usr/local/etc/pkg.conf
pkg update -f

Устанавливаем необходимые пакеты

Установить perl можно довольно быстро

pkg install perl5

Но автор на всякий случай устанавливает из портов, чтобы удостовериться, что perl будет собран с опцией «THREADS - Build threaded perl» - не забудьте проверить это когда будет выведен список опций:

cd /usr/ports/lang/perl5.20/
make install clean

Ставим необходимые приложения

pkg install perl5 bash subversion mc sudo

Назначаем bash дефолтным для учетной записи root:

pw usermod root -s /usr/local/bin/bash

Добавим возможность по sudo переключаться на root без ввода пароля:

echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /usr/local/etc/sudoers

В дальнейшем вместо «su» можно вводить «sudo bash» без ввода пароля

Загружаем NoDeny+

Для NoDeny plus:

cd /usr/local
svn co svn://nodeny-plus.com.ua/release nodeny

Для NoDeny next:

cd /usr/local
svn co svn://nodeny-plus.com.ua/release/next nodeny

Настраиваем nat

cp /usr/local/nodeny/etc/pf.conf /etc/
ee /etc/pf.conf

В первой строке указываем интерфейс, который смотрит на вышестоящего провайдера.

kldload pf
pfctl -N -f /etc/pf.conf

Игнорируем следующие ошибки:

No ALTQ support in kernel
ALTQ related functions disabled

Настраиваем локальный dns

sysrc local_unbound_enable=YES
/etc/rc.d/local_unbound quietstart
ee /var/unbound/unbound.conf

В секцию server добавляем строки

        interface: 1.1.1.1
        interface: 127.0.0.1
        access-control: 0.0.0.0/0 allow

Проверяем корректность конфига:

/etc/rc.d/local_unbound configtest

Должны получить в ответ:

unbound-checkconf: no errors in /var/unbound/unbound.conf
/etc/rc.d/local_unbound restart

Проверяем

drill @1.1.1.1 nodeny.com.ua

Смотрим внимательно в ответ - в нем должен присутствовать ip адрес nodeny.com.ua

Проверяем, что клиенты получают доступ в интернет

На данном этапе сервер может выполнять свои функции без NoDeny, т.е. давать абонентам доступ в интернет. Пробуем с клиентского компьютера пропинговать 8.8.8.8. Если не пингуется, на сервере запускаем tcpdump (где fxp1 - интерфейс на вышестоящего провайдера):

tcpdump -ifxp1 -p -n icmp

Если пакеты, идущие на 8.8.8.8, идут от ip клиента, значит nat у нас не работает. Смотрим pf.conf все ли мы верно там указали.

На клиентском компьютере в качестве DNS устанавливаем 1.1.1.1 (наш локальный). Проверяем ping ya.ru



Настраиваем NoDeny

Устанавливаем MySQL-сервер

pkg install mysql80-server
mkdir /var/db/mysql_tmpdir/
chown mysql /var/db/mysql_tmpdir/

Автозапуск при старте системы

sysrc mysql_enable=YES

Стартуем mysql-сервер

service mysql-server start


Создаем структуру БД NoDeny+

mysql -u root

Выполняем в консоли mysql:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'hardpass';
create database nodeny;
use nodeny;
source /usr/local/nodeny/bill.sql;

Кроме создания структуры БД NoDeny+, мы изменили root пароль для mysql на hardpass. Измените его на иной если это не тестовая инсталляция. Выходим:

exit;

Perl-модуль для MySQL

pkg install p5-DBD-mysql

Если появится сообщение типа такого:

Installed packages to be REMOVED:
    mysql80-client: 8.0.31

Это означает, что в пакетах perl-модуль не работает с mysql версии 8. Надо прервать установку и устанавить из портов:

portsnap fetch
portsnap extract
cd /usr/ports/databases/p5-DBD-mysql/ && make install clean

Устанавливаем Web-сервер

pkg install apache24

Автозапуск

sysrc apache24_enable=YES

Подправим конфиг

sed -i '' '1 s/.*/LoadModule cgi_module libexec\/apache24\/mod_cgi.so/' /usr/local/etc/apache24/httpd.conf
echo 'ServerName 0.0.0.0:80' >> /usr/local/etc/apache24/httpd.conf

Стартуем

apachectl start

Открываем в браузере

http://10.0.0.1/

Если не получаем приветствующего сообщения «It works!» - смотрим логи

tail /var/log/httpd-error.log


Установка веб-интерфейса NoDeny+

pkg install p5-Crypt-Rijndael p5-Net-ARP p5-JSON p5-JSON-XS p5-LWP-Protocol-https p5-CGI
ln -s /usr/local/bin/perl /usr/bin/perl > /dev/null

По умолчанию во FreeBSD путь к cgi-bin и корню www: /usr/local/www/apache24/. Следующие команды удалят cgi-bin и data (www корень), после чего создадут символические линки на папки cgi-bin и htdocs внутри /usr/local/nodeny/

rm -fR /usr/local/www/apache24/cgi-bin
rm -fR /usr/local/www/apache24/data
ln -s /usr/local/nodeny/cgi-bin/ /usr/local/www/apache24/cgi-bin
ln -s /usr/local/nodeny/htdocs/ /usr/local/www/apache24/data

Подключим модули (-x), установим владельца и права на файлы (-w), создадим стартовый конфиг (-m), создадим суперадмина (-p):

cd /usr/local/nodeny
perl install.pl -x
perl install.pl -w=www
perl install.pl -m
perl install.pl -p admin=12345

Входим в админку под логином admin и паролем 12345

http://10.0.0.1/cgi-bin/stat.pl


Если в левом верхнем углу появится эмблема NoDeny+, то заходим в настройки и устанавливаем в «да» параметр «установите "да" если путь к изображениям корректен»


Изменяем следующие настройки:

  • Тарификация → Денежная еденица
  • Доп.поля. Удалите поля, которые не потребуются для данных ваших клиентов и добавьте нужные. Например, если вам необходимо поле «Город», то следует создать запись:
    • Имя поля: Город
    • Имя поля в бд: _adr_city
    • Тип поля: выпадающий список
    • Тип объекта: city

В настройках в разделе «Администраторы» меняем пароль своей учетке, а также выдаем все привилегии.

Создаем клиентскую учетную запись, после чего устанавливаем в значение «Всегда онлайн» параметр «Авторизация» - это позволит клиенту получить доступ в интернет без авторизации вначале тестирования. Также добавляем ip и услугу «1 Мбит».


Запуск ядра NoDeny+

Ядро NoDeny+ работает в фоне и выполняет следующие функции: обработка авторизаций, сбор статистики трафика, управление услугами и т.д. Конфиги находятся в файлах /usr/local/nodeny/kernel/*.cfg.

Получим список всех установленных модулей:

cd /usr/local/nodeny
perl nokernel.pl -L

Напротив названия модуля YES означает, что модуль будет запускаться автоматически при старте ядра. Если же нет, то мы можем запустить модуль в отдельном потоке с помощью ключа -m.

Запускаем ядро со стандартным набором модулей

perl nokernel.pl

Если на консоль не вывело никаких ошибок - ядро успешно запустило все модули.

Запускаем скрипт управления фаерволом

perl noserver.pl -v

Если на консоль не вывело никаких ошибок - ставим в автозагрузку:

echo '/usr/bin/perl /usr/local/nodeny/nokernel.pl -d &' >> /etc/rc.local
echo '/usr/bin/perl /usr/local/nodeny/noserver.pl -d &' >> /etc/rc.local

Запускаем скрипты в фоне

perl /usr/local/nodeny/nokernel.pl -d &
perl /usr/local/nodeny/noserver.pl -d &

Настройка фаервола

cp /usr/local/nodeny/etc/rc.firewall /etc/
ee /etc/rc.firewall

Редактируем rc.firewall, меняем внешний интерфейс:

ifOut='fxp1'

Если мы будем осуществлять подсчет трафика, раскомментируем строчку:

#use_ipcad_divert=YES

и установим программу сбора трафика ipcad:

pkg install ipcad

В автозагрузку:

echo ipcad_enable=YES >> /etc/rc.conf
cp /usr/local/nodeny/etc/ipcad.conf /usr/local/etc/
ipcad -d

В автозагрузку модуль NoDeny подсчета трафика:

echo '/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=collectors -d &' >> /etc/rc.local

Проверим, что все сделали правильно

Перезагружаем сервер:

reboot

Логинимся. Проверяем, что запущены скрипты NoDeny:

ps ax | grep nodeny | grep pl | grep -v grep

Должны получить в ответ примерно следующее:

 659 v0- S    0:00.98 /usr/bin/perl /usr/local/nodeny/noserver.pl -d
 660 v0- S    0:01.36 /usr/bin/perl /usr/local/nodeny/nokernel.pl -d
 661 v0- S    0:00.99 /usr/bin/perl /usr/local/nodeny/nokernel.pl -m=collectors -d

Здесь видно, что запущен модуль управления фаерволом (noserver) и ядро NoDeny (nokernel). Также запущено второе ядро NoDeny с запуском модуля подсчета трафика (-m=collectors). Как было сказано, все модули, которые при perl nokernel.pl -L выдают YES, запускаются при обычном старте nokernel (все вместе в одном потоке). Поскольку сбор трафика довольно нагруженный процесс и может требовать много памяти - автор рекомендует запускать его отдельным процессом ядра.

Проверяем запущен ли ipcad (если используем подсчет трафика):

ps ax | grep ipcad | grep -v grep

Проверяем состояние фаервола:

ipfw list

Он должен частично соответствовать содержимому файла /etc/rc.firewall. Если мы используем подсчет трафика, то проверяем существование строки 420 и что в ней есть команда divert


Можно проверить правильно ли идет управление фаерволом, выдается скорость и считается трафик. Для этого на тестовом, компьютере, подключенном к настраиваемому серверу, пропишите статический ip. В админке создайте учетную запись абонента (на титульной странице кнопка «создать»), установите ей параметры:

  • отключать ли по балансу = «нет»
  • авторизация = «всегда онлайн»
  • добавьте ip и тариф для доступа в интернет

На тестовом компьютере через несколько секунд должен появиться доступ в интернет.

Если интернет не появился, проверим, что скрипт управления фаерволом дал указание фаерволу пропустить абонента:
ipfw table 21 list

В списке должен быть ip абонента и какое-то число. Если нет, то запустим скрипт управления фаерволом с выводом информации в консоль:

perl /usr/local/nodeny/noserver.pl -v

Не забывайте условия доступа в интенет:

  • в настройках абонента должен быть привязан ip к его учетной записи
  • должен быть выдан тариф с доступом в интернет
  • абонент должен быть авторизован (пока мы до этого не дошли) либо же его параметр авторизация должен быть «всегда онлайн»

Настройка авторизации клиентов

На этом этапе необходимо определиться с технологией подключения и авторизации абонентов. Наиболее распространено:

  • ipoe + dhcp: удобен для абонентов - не нужно ничего настраивать на компьютере. Однако низкая безопасность т.к. злоумышленник может подделать свой мак-адрес и пользоваться интернетом за чужой счет
  • ipoe + dhcp + option82: удобен для абонентов - не нужно ничего настраивать на компьютере. Хорошая безопасность. Однако требует установки управляемых свичей и их настройку.
  • pppoe: относительно сложен для клиентов. Безопасность лучше чем при dhcp. Небольшое уменьшение пропускной способности внутри сети из-за пересылки дополнительных данных в pppoe протоколе.