Установка NoDeny

Материал из NoDeny Plus
Перейти к: навигация, поиск

Вступление

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

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

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

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

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

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

При установке можно выбирать рекомендуемые параметры, т.е. на все вопросы нажимать enter. Обращаем внимание на такие вещи:

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

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

Если мы настраиваем тестовый сервер, то скорее всего выбрали получение 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-light 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+

cd /usr/local
svn co svn://nodeny-plus.com.ua/release 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

/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 restart
unbound-checkconf

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

unbound-checkconf: no errors in /var/unbound/unbound.conf

Проверяем

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 mysql56-server

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

cp /usr/local/nodeny/etc/my.cnf /etc/

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

/usr/local/etc/rc.d/mysql-server forcestart

Устанавливаем пароль root в mysql. Если мы настраиваем боевой сервер, то не нужно указывать 'hardpass', тогда система попросит ввести пароль с консоли - таким образом в истории bash не будет храниться пароль.

mysqladmin -u root password 'hardpass'

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

echo mysql_enable=YES >> /etc/rc.conf

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

mysql -u root --password='hardpass'

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

create database nodeny;
use nodeny;
source /usr/local/nodeny/bill.sql;

Выходим:

exit;

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

pkg install apache24

Автозапуск

echo apache24_enable=YES >> /etc/rc.conf

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

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-DBD-mysql p5-Crypt-Rijndael net/p5-Net-ARP p5-JSON p5-JSON-XS
ln -s /usr/local/bin/perl /usr/bin/perl > /dev/null

По умолчанию во 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

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

Создаем клиентскую учетную запись, после чего устанавливаем в значение «Всегда онлайн» параметр «Авторизация» - это позволит клиенту получить доступ в интернет без авторизации вначале тестирования. Также добавляем 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 протоколе.