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

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
(Новая страница: «При установке можно выбирать рекомендуемые параметры. Стоить лишь обратить внимание на…»)
 
мНемає опису редагування
 
(Не показано 167 проміжних версій цього користувача)
Рядок 1: Рядок 1:
При установке можно выбирать рекомендуемые параметры. Стоить лишь обратить внимание на такие вещи:
= Intro =


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


'''После первой перезагрузки логинимся по ssh под нашим логином и становимся root-ом:'''
* Сначала настраиваем сервер так, чтобы он работал без NoDeny, т.е. предоставлял абонентам доступ в интернет: выполнял функции  NAT, маршрутизации и локального DNS
* Настраиваем веб-интерфейс 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 в зависимости от типа процессора вашего сервера. Обратите внимание, что 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 он получил:
 
<syntaxhighlight lang="bash">
ifconfig
</syntaxhighlight>
 
Далее удобнее выполнять настройку по ssh. Логинимся по ssh под созданным логином и становимся root-ом:'''


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Рядок 15: Рядок 46:
</syntaxhighlight>
</syntaxhighlight>


Редактируем rc.conf
Добавляем в rc.conf
<pre>
<pre>
hostname="nodeny.com.ua"
defaultrouter="1.2.3.1"
ifconfig_fxp0="inet 10.0.0.1 netmask 255.255.255.0"
ifconfig_fxp1="inet 1.2.3.4 netmask 255.255.255.0"
ifconfig_lo0_alias0="inet 1.1.1.1 netmask 255.255.255.255"
ifconfig_lo0_alias0="inet 1.1.1.1 netmask 255.255.255.255"
fsck_y_enable="YES"
fsck_y_enable="YES"
background_fsck="NO"
background_fsck="NO"
sshd_enable="YES"
firewall_enable="YES"
firewall_enable="YES"
gateway_enable="YES"
gateway_enable="YES"
local_unbound_enable="YES"
</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 сервера, сервера авторизации и т.д.
* Интерфейс fxp1 подключен к шлюзу вышестоящего провайдера с ip 1.2.3.1.
* local_unbound_enable="YES" - автозапуск локального DNS
* К интерфейсу fxp0 подключаются абоненты.
</div>
 
Копируем следующий текст и выполняем на сервере в командной строке одним блоком:
 
<syntaxhighlight lang="bash">
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
</syntaxhighlight>
 
<div style='display:none'>
Устанавливаем пакетный менеджер PKGNG==
 
<syntaxhighlight lang="bash">
/usr/sbin/pkg
</syntaxhighlight>
 
На вопрос отвечаем «y»
 
<syntaxhighlight lang="bash">
 
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
</syntaxhighlight>
</div>
 
==Устанавливаем необходимые пакеты==
 
<div style='display:none'>
Установить perl можно довольно быстро
<source lang="bash">
pkg install perl5
</source>
 
Но автор на всякий случай устанавливает из портов, чтобы удостовериться, что perl будет собран с опцией «THREADS - Build threaded perl» - не забудьте проверить это когда будет выведен список опций:
 
<syntaxhighlight lang="bash">
cd /usr/ports/lang/perl5.20/
make install clean
</syntaxhighlight>
 
Ставим необходимые приложения
</div>
 
<source lang="bash">
pkg install perl5 bash subversion mc sudo
</source>
 
Назначаем bash дефолтным для учетной записи root:
 
<source lang="bash">
pw usermod root -s /usr/local/bin/bash
</source>
 
Добавим возможность по sudo переключаться на root без ввода пароля:
 
<source lang="bash">
echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /usr/local/etc/sudoers
</source>
 
В дальнейшем вместо  «su» можно вводить «sudo bash» без ввода пароля
 
==Загружаем NoDeny+==
Для NoDeny plus:
<syntaxhighlight lang="bash">
cd /usr/local
svn co svn://nodeny-plus.com.ua/release nodeny
</syntaxhighlight>
 
Для NoDeny next:
<syntaxhighlight lang="bash">
cd /usr/local
svn co svn://nodeny-plus.com.ua/release/next nodeny
</syntaxhighlight>
 
==Настраиваем nat==
 
<syntaxhighlight lang="bash">
cp /usr/local/nodeny/etc/pf.conf /etc/
ee /etc/pf.conf
</syntaxhighlight>
 
В первой строке указываем интерфейс, который смотрит на вышестоящего провайдера.
 
<syntaxhighlight lang="bash">
kldload pf
pfctl -N -f /etc/pf.conf
</syntaxhighlight>
 
Игнорируем следующие ошибки:
<pre>
No ALTQ support in kernel
ALTQ related functions disabled
</pre>
 
==Настраиваем локальный dns==
 
<syntaxhighlight lang="bash">
sysrc local_unbound_enable=YES
/etc/rc.d/local_unbound quietstart
ee /var/unbound/unbound.conf
</syntaxhighlight>
 
В секцию server добавляем строки
 
<pre>
        interface: 1.1.1.1
        interface: 127.0.0.1
        access-control: 0.0.0.0/0 allow
</pre>
 
Проверяем корректность конфига:
 
<syntaxhighlight lang="bash">
/etc/rc.d/local_unbound configtest
</syntaxhighlight>
 
Должны получить в ответ:
 
<pre>
unbound-checkconf: no errors in /var/unbound/unbound.conf
</pre>
 
<syntaxhighlight lang="bash">
/etc/rc.d/local_unbound restart
</syntaxhighlight>
 
Проверяем
 
<syntaxhighlight lang="bash">
drill @1.1.1.1 nodeny.com.ua
</syntaxhighlight>
 
Смотрим внимательно в ответ - в нем должен присутствовать ip адрес nodeny.com.ua
 
==Проверяем, что клиенты получают доступ в интернет==
 
На данном этапе сервер может выполнять свои функции без NoDeny, т.е. давать абонентам доступ в интернет. Пробуем с клиентского компьютера пропинговать 8.8.8.8. Если не пингуется, на сервере запускаем tcpdump (где fxp1 - интерфейс на вышестоящего провайдера):
 
<syntaxhighlight lang="bash">
tcpdump -ifxp1 -p -n icmp
</syntaxhighlight>
 
Если пакеты, идущие на 8.8.8.8, идут от ip клиента, значит nat у нас не работает. Смотрим pf.conf все ли мы верно там указали.
 
На клиентском компьютере в качестве DNS устанавливаем 1.1.1.1 (наш локальный). Проверяем ping ya.ru
 
 
 
 
<p></p>
 
=Настраиваем NoDeny=
 
==Устанавливаем MySQL-сервер==
 
<source lang="bash">
pkg install mysql80-server
mkdir /var/db/mysql_tmpdir/
chown mysql /var/db/mysql_tmpdir/
</source>
 
Автозапуск при старте системы
 
<source lang="bash">
sysrc mysql_enable=YES
</source>
 
Стартуем mysql-сервер
 
<source lang="bash">
service mysql-server start
</source>
 
 
Создаем структуру БД NoDeny+
 
<source lang="bash">
mysql -u root
</source>
 
Выполняем в консоли mysql:
 
<pre>
ALTER USER 'root'@'localhost' IDENTIFIED BY 'hardpass';
create database nodeny;
use nodeny;
source /usr/local/nodeny/bill.sql;
</pre>
 
Кроме создания структуры БД NoDeny+, мы изменили root пароль для mysql на hardpass. Измените его на иной если это не тестовая инсталляция. Выходим:
 
<pre>
exit;
</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-сервер==
 
<source lang="bash">
pkg install apache24
</source >
 
Автозапуск
 
<syntaxhighlight lang="bash">
sysrc apache24_enable=YES
</syntaxhighlight>
 
Подправим конфиг
 
<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
</syntaxhighlight>
 
Стартуем
 
<syntaxhighlight lang="bash">
apachectl start
</syntaxhighlight>
 
Открываем в браузере
 
<pre>
http://10.0.0.1/
</pre>
 
Если не получаем приветствующего сообщения «It works!» - смотрим логи
 
<syntaxhighlight lang="bash">
tail /var/log/httpd-error.log
</syntaxhighlight>
 
 
 
<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">
ln -s /usr/local/bin/perl /usr/bin/perl > /dev/null
</syntaxhighlight>
 
По умолчанию во FreeBSD путь к cgi-bin и корню www: /usr/local/www/apache24/. Следующие команды удалят cgi-bin и data (www корень), после чего создадут символические линки на папки cgi-bin и htdocs внутри /usr/local/nodeny/
 
<syntaxhighlight lang="bash">
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
</syntaxhighlight>
 
Подключим модули (-x), установим владельца и права на файлы (-w), создадим стартовый конфиг (-m), создадим суперадмина (-p):
 
<syntaxhighlight lang="bash">
cd /usr/local/nodeny
perl install.pl -x
perl install.pl -w=www
perl install.pl -m
perl install.pl -p admin=12345
</syntaxhighlight>
 
Входим в админку под логином admin и паролем 12345
 
<pre>
http://10.0.0.1/cgi-bin/stat.pl
</pre>
 
 
'''Если в левом верхнем углу появится эмблема NoDeny+, то заходим в настройки и устанавливаем в «да» параметр «установите "да" если путь к изображениям корректен»'''
 
 
Изменяем следующие настройки:
 
* Тарификация → Денежная еденица
* Доп.поля. Удалите поля, которые не потребуются для данных ваших клиентов и добавьте нужные. Например, если вам необходимо поле «Город», то следует создать запись:
** Имя поля: Город
** Имя поля в бд: _adr_city
** Тип поля: выпадающий список
** Тип объекта: city
 
В настройках в разделе «Администраторы» меняем пароль своей учетке, а также выдаем все привилегии.
 
Создаем клиентскую учетную запись, после чего устанавливаем в значение «Всегда онлайн» параметр «Авторизация» - это позволит клиенту получить доступ в интернет без авторизации вначале тестирования. Также добавляем ip и услугу «1 Мбит».
 
 
 
<p></p>
 
=Запуск ядра NoDeny+=
 
Ядро NoDeny+ работает в фоне и выполняет следующие функции: обработка авторизаций, сбор статистики трафика, управление услугами и т.д. Конфиги находятся в файлах /usr/local/nodeny/kernel/*.cfg.
 
Получим список всех установленных модулей:
 
<syntaxhighlight lang="bash">
cd /usr/local/nodeny
perl nokernel.pl -L
</syntaxhighlight>
 
Напротив названия модуля YES означает, что модуль будет запускаться автоматически при старте ядра. Если же нет, то мы можем запустить модуль в отдельном потоке с помощью ключа -m.
 
Запускаем ядро со стандартным набором модулей
 
<syntaxhighlight lang="bash">
perl nokernel.pl
</syntaxhighlight>
 
Если на консоль не вывело никаких ошибок - ядро успешно запустило все модули.
 
Запускаем скрипт управления фаерволом
 
<syntaxhighlight lang="bash">
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/noserver.pl -d &' >> /etc/rc.local
</syntaxhighlight>
 
Запускаем скрипты в фоне
 
<source lang="bash">
perl /usr/local/nodeny/nokernel.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>
 
==Настройка авторизации клиентов==
 
На этом этапе необходимо определиться с технологией подключения и авторизации абонентов. Наиболее распространено:
 
* [[dhcp|ipoe + dhcp]]: удобен для абонентов - не нужно ничего настраивать на компьютере. Однако низкая безопасность т.к. злоумышленник может подделать свой мак-адрес и пользоваться интернетом за чужой счет
* ipoe + dhcp + option82: удобен для абонентов - не нужно ничего настраивать на компьютере. Хорошая безопасность. Однако требует установки управляемых свичей и их настройку.
* 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 протоколе.