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

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


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


* Сначала настраиваем сервер так, чтобы он работал без NoDeny, т.е. предоставлял абонентам доступ в интернет: выполнял функции  NAT, маршрутизации и локального DNS
* Сначала настраиваем сервер так, чтобы он работал без NoDeny, т.е. предоставлял абонентам доступ в интернет: выполнял функции  NAT, маршрутизации и локального DNS
* Настроим веб-интерфейс NoDeny
* Настраиваем веб-интерфейс NoDeny
* Настроим серверные скрипты NoDeny
* Настраиваем серверные скрипты NoDeny
 
Предпочитаемой системой для NoDeny является FreeBSD. Эта система во многом похожа на Lunux. Если вы сталкиваетесь  с  FreeBSD впервые, то обратите внимание на используемый редактор в этой системе: '''ee'''. Выход из редактора осуществляется по клавише  ESC, затем «a», затем снова «a»
<br><br>


=Установка и настройка сервера=
=Установка и настройка сервера=
[[Install NoDeny on Ubuntu server 22.04|Для Ubuntu server 22.04]]
Ниже описана установка на FreeBSD


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


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


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


* На вопрос "Would you like to add users to the installed system now?" отвечаем Yes и создаем пользователя. При этом на вопрос Login Group вводим 0 (ноль) - тогда наш пользователь сможет стать root с помощью команды su
Минутное видео инсталляции системы FreeBSD:
 
<youtube>oID6BFzxcr0</youtube>


==После установки и перезагрузки==
==После установки и перезагрузки==
Рядок 48: Рядок 57:


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


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


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Рядок 63: Рядок 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">
Рядок 81: Рядок 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">
Рядок 97: Рядок 110:


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


<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>
 
В дальнейшем вместо  «su» можно вводить «sudo bash» без ввода пароля


==Загружаем NoDeny+==
==Загружаем NoDeny+==
Для NoDeny plus:
<syntaxhighlight lang="bash">
cd /usr/local
svn co svn://nodeny-plus.com.ua/release nodeny
</syntaxhighlight>


Для NoDeny next:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cd /usr/local
cd /usr/local
svn co svn://nodeny-plus.com.ua/release nodeny
svn co svn://nodeny-plus.com.ua/release/next nodeny
</syntaxhighlight>
</syntaxhighlight>


Рядок 125: Рядок 153:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
kldload pf
pfctl -N -f /etc/pf.conf
pfctl -N -f /etc/pf.conf
</syntaxhighlight>
</syntaxhighlight>
Рядок 137: Рядок 166:


<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>
Рядок 151: Рядок 182:


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


Рядок 159: Рядок 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">
Рядок 195: Рядок 224:
==Устанавливаем MySQL-сервер==
==Устанавливаем MySQL-сервер==


<syntaxhighlight lang="bash">
<source lang="bash">
pkg install mysql56-server
pkg install mysql80-server
</syntaxhighlight>
mkdir /var/db/mysql_tmpdir/
 
chown mysql /var/db/mysql_tmpdir/
Создаем конфиг
</source>


<syntaxhighlight lang="bash">
Автозапуск при старте системы
ee /etc/my.cnf
</syntaxhighlight>
 
Редактируем my.cnf
 
<pre>
[mysqld]
skip-networking
character-set-server=utf8
init-connect="SET NAMES utf8"
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;
Рядок 259: Рядок 258:
</pre>
</pre>


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


<pre>
<pre>
exit;
exit;
</pre>
</pre>
==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">
portsnap fetch
portsnap extract
cd /usr/ports/databases/p5-DBD-mysql/ && make install clean
</syntaxhighlight>


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


<syntaxhighlight lang="bash">
<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>


Рядок 301: Рядок 319:
tail /var/log/httpd-error.log
tail /var/log/httpd-error.log
</syntaxhighlight>
</syntaxhighlight>
<p></p>


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


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
pkg install p5-DBD-mysql p5-Crypt-Rijndael net/p5-Net-ARP p5-JSON p5-JSON-XS
pkg install p5-Crypt-Rijndael p5-Net-ARP p5-JSON p5-JSON-XS p5-LWP-Protocol-https p5-CGI
</syntaxhighlight>
</syntaxhighlight>


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
ln -s /usr/local/bin/perl /usr/bin/perl 2> /dev/null
ln -s /usr/local/bin/perl /usr/bin/perl > /dev/null
</syntaxhighlight>
</syntaxhighlight>


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


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


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


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


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


Переходим по ссылке с логином текущего администратора в верхнем меню, в нашем случае «admin». Далее по ссылке «Администраторы» и меняем пароль своей учетке, а также выдаем все привилегии.


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


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


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


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


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Рядок 366: Рядок 391:
</syntaxhighlight>
</syntaxhighlight>


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


Запускаем ядро со стандартным набором модулей
Запускаем ядро со стандартным набором модулей
Рядок 391: Рядок 416:
Запускаем скрипты в фоне
Запускаем скрипты в фоне


<syntaxhighlight lang="bash">
<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 &
</syntaxhighlight>
</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>


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


* ipoe + dhcp: удобен для абонентов - не нужно ничего настраивать на компьютере. Однако низкая безопасность т.к. злоумышленник может подделать свой мак-адрес и пользоваться интернетом за чужой счет
* [[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 протоколе.