Установка NoDeny: відмінності між версіями
Sv (обговорення | внесок) |
Sv (обговорення | внесок) мНемає опису редагування |
||
(Не показані 103 проміжні версії цього користувача) | |||
Рядок 1: | Рядок 1: | ||
= | = Intro = | ||
Устанавливаем по такой схеме: | Устанавливаем по такой схеме: | ||
* Сначала настраиваем сервер так, чтобы он работал без NoDeny, т.е. предоставлял абонентам доступ в интернет: выполнял функции NAT, маршрутизации и локального DNS | * Сначала настраиваем сервер так, чтобы он работал без 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 в зависимости от типа процессора вашего сервера. Версию желательно выбирать 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. | ||
Минутное видео инсталляции системы 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> | ||
= | <div style='display:none'> | ||
Устанавливаем пакетный менеджер PKGNG== | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Рядок 81: | Рядок 92: | ||
pkg update -f | pkg update -f | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</div> | |||
==Устанавливаем необходимые | ==Устанавливаем необходимые пакеты== | ||
<div style='display:none'> | |||
< | Установить perl можно довольно быстро | ||
<source lang="bash"> | |||
pkg install perl5 | pkg install perl5 | ||
</ | </source> | ||
Но автор на всякий случай устанавливает из портов, чтобы удостовериться, что perl будет собран с | Но автор на всякий случай устанавливает из портов, чтобы удостовериться, что perl будет собран с опцией «THREADS - Build threaded perl» - не забудьте проверить это когда будет выведен список опций: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Рядок 96: | Рядок 109: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Ставим | Ставим необходимые приложения | ||
</div> | |||
< | <source lang="bash"> | ||
pkg install bash subversion mc | pkg install perl5 bash subversion mc sudo | ||
</ | </source> | ||
Назначаем bash дефолтным для учетной записи root: | Назначаем bash дефолтным для учетной записи root: | ||
< | <source lang="bash"> | ||
pw usermod root -s /usr/local/bin/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+== | ||
Для 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> | ||
Игнорируем | Игнорируем следующие ошибки: | ||
<pre> | <pre> | ||
No ALTQ support in kernel | No ALTQ support in kernel | ||
Рядок 138: | Рядок 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> | ||
Рядок 152: | Рядок 182: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
/etc/rc.d/local_unbound configtest | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Рядок 160: | Рядок 190: | ||
unbound-checkconf: no errors in /var/unbound/unbound.conf | unbound-checkconf: no errors in /var/unbound/unbound.conf | ||
</pre> | </pre> | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Рядок 177: | Рядок 205: | ||
==Проверяем, что клиенты получают доступ в интернет== | ==Проверяем, что клиенты получают доступ в интернет== | ||
На данном этапе сервер может выполнять свои функции без NoDeny, т.е. давать абонентам доступ в интернет. Пробуем с клиентского компьютера пропинговать 8.8.8.8. Если не пингуется: | На данном этапе сервер может выполнять свои функции без NoDeny, т.е. давать абонентам доступ в интернет. Пробуем с клиентского компьютера пропинговать 8.8.8.8. Если не пингуется, на сервере запускаем tcpdump (где fxp1 - интерфейс на вышестоящего провайдера): | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Рядок 187: | Рядок 215: | ||
На клиентском компьютере в качестве DNS устанавливаем 1.1.1.1 (наш локальный). Проверяем ping ya.ru | На клиентском компьютере в качестве 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-сервер | Стартуем mysql-сервер | ||
< | <source lang="bash"> | ||
service mysql-server start | |||
</source> | |||
</ | |||
Создаем структуру БД NoDeny+ | Создаем структуру БД NoDeny+ | ||
< | <source lang="bash"> | ||
mysql -u root | mysql -u root | ||
</ | </source> | ||
Выполняем в консоли mysql: | Выполняем в консоли mysql: | ||
<pre> | <pre> | ||
ALTER USER 'root'@'localhost' IDENTIFIED BY 'hardpass'; | |||
create database nodeny; | create database nodeny; | ||
use nodeny; | use nodeny; | ||
Рядок 255: | Рядок 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-сервер== | ||
< | <source lang="bash"> | ||
pkg install apache24 | pkg install apache24 | ||
</ | </source > | ||
Автозапуск | Автозапуск | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sysrc apache24_enable=YES | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Рядок 297: | Рядок 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 | 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 | ln -s /usr/local/bin/perl /usr/bin/perl > /dev/null | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Рядок 333: | Рядок 359: | ||
</pre> | </pre> | ||
'''Если в левом верхнем углу появится эмблема NoDeny+, то заходим в настройки и устанавливаем в «да» параметр «установите "да" если путь к изображениям корректен» | |||
'''Если в левом верхнем углу появится эмблема NoDeny+, то заходим в настройки и устанавливаем в «да» параметр «установите "да" если путь к изображениям корректен»''' | |||
Изменяем следующие настройки: | Изменяем следующие настройки: | ||
* Тарификация → Денежная еденица | * Тарификация → Денежная еденица | ||
* Доп.поля. Удалите поля, которые не потребуются для данных ваших клиентов и добавьте нужные. Например, если вам необходимо поле «Город», то следует создать запись: | |||
* Доп.поля. Удалите поля, которые не потребуются для данных ваших клиентов и добавьте нужные. Например, если вам необходимо поле «Город», то | |||
** Имя поля: Город | ** Имя поля: Город | ||
** Имя поля в бд: _adr_city | ** Имя поля в бд: _adr_city | ||
Рядок 345: | Рядок 372: | ||
** Тип объекта: city | ** Тип объекта: city | ||
В настройках в разделе «Администраторы» меняем пароль своей учетке, а также выдаем все привилегии. | |||
Создаем клиентскую учетную запись, после чего устанавливаем в значение «Всегда онлайн» параметр «Авторизация» - это позволит клиенту получить доступ в интернет без авторизации вначале тестирования. Также добавляем ip и услугу «1 Мбит». | |||
<p></p> | |||
=Запуск ядра NoDeny+= | =Запуск ядра NoDeny+= | ||
Ядро NoDeny+ работает в фоне и выполняет следующие функции: обработка авторизаций, сбор статистики трафика, управление услугами и т.д. Конфиги находятся в файлах /usr/local/nodeny/kernel/*.cfg | Ядро NoDeny+ работает в фоне и выполняет следующие функции: обработка авторизаций, сбор статистики трафика, управление услугами и т.д. Конфиги находятся в файлах /usr/local/nodeny/kernel/*.cfg. | ||
Получим список всех | Получим список всех установленных модулей: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Рядок 362: | Рядок 391: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Напротив названия модуля | Напротив названия модуля YES означает, что модуль будет запускаться автоматически при старте ядра. Если же нет, то мы можем запустить модуль в отдельном потоке с помощью ключа -m. | ||
Запускаем ядро со стандартным набором модулей | Запускаем ядро со стандартным набором модулей | ||
Рядок 387: | Рядок 416: | ||
Запускаем скрипты в фоне | Запускаем скрипты в фоне | ||
< | <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> | |||
==Настройка авторизации клиентов== | ==Настройка авторизации клиентов== | ||
Рядок 396: | Рядок 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»
Установка и настройка сервера
Ниже описана установка на 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"
Копируем следующий текст и выполняем на сервере в командной строке одним блоком:
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
Устанавливаем необходимые пакеты
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 и тариф для доступа в интернет
На тестовом компьютере через несколько секунд должен появиться доступ в интернет.
Настройка авторизации клиентов
На этом этапе необходимо определиться с технологией подключения и авторизации абонентов. Наиболее распространено:
- ipoe + dhcp: удобен для абонентов - не нужно ничего настраивать на компьютере. Однако низкая безопасность т.к. злоумышленник может подделать свой мак-адрес и пользоваться интернетом за чужой счет
- ipoe + dhcp + option82: удобен для абонентов - не нужно ничего настраивать на компьютере. Хорошая безопасность. Однако требует установки управляемых свичей и их настройку.
- pppoe: относительно сложен для клиентов. Безопасность лучше чем при dhcp. Небольшое уменьшение пропускной способности внутри сети из-за пересылки дополнительных данных в pppoe протоколе.