Установка NoDeny: відмінності між версіями
Sv (обговорення | внесок) |
Sv (обговорення | внесок) мНемає опису редагування |
||
Рядок 1: | Рядок 1: | ||
= | = Intro = | ||
Устанавливаем по такой схеме: | Устанавливаем по такой схеме: |
Поточна версія на 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 протоколе.