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

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
Рядок 374: Рядок 374:
</syntaxhighlight>
</syntaxhighlight>


Напротив названия модуля 1 означает, что модуль будет запускаться автоматически при старте ядра.
Напротив названия модуля YES означает, что модуль будет запускаться автоматически при старте ядра.


Запускаем ядро со стандартным набором модулей
Запускаем ядро со стандартным набором модулей

Версія за 09:11, 7 серпня 2015

Вступление

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

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

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

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

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

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

  • На вопрос "Would you like to add users to the installed system now?" отвечаем Yes и создаем пользователя. При этом на вопрос Login Group вводим 0 (ноль) - тогда наш пользователь сможет стать 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

Устанавливаем пакетный менеджер 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 bash subversion mc-light sudo

Назначаем bash дефолтным для учетной записи root:

pw usermod root -s /usr/local/bin/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

В первой строке указываем интерфейс, который смотрит на вышестоящего провайдера.

pfctl -N -f /etc/pf.conf

Игнорируем следующие ошибки:

No ALTQ support in kernel
ALTQ related functions disabled

Настраиваем локальный dns

ee /var/unbound/unbound.conf

В секцию server добавляем строки

        interface: 1.1.1.1
        interface: 127.0.0.1
        access-control: 0.0.0.0/0 allow

Проверяем корректность конфига:

unbound-checkconf

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

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

Стартуем dns:

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

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

ee /etc/my.cnf

Редактируем my.cnf

[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]
default-character-set=utf8

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

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

Устанавливаем пароль root в mysql. Если мы настраиваем боевой сервер, то вместо «password 'hardpass'» необходимо использовать ключ «-p» и ввести пароль с консоли - таким образом в истории 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 2> /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
После этого, вам необходимо зайти в настройках в раздел «Объекты» и внести несколько городов, установив параметр «Тип» в значение «city».

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

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


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

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

Получим список всех плагинов

cd /usr/local/nodeny
perl nokernel.pl -L

Напротив названия модуля YES означает, что модуль будет запускаться автоматически при старте ядра.

Запускаем ядро со стандартным набором модулей

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 &

Настройка авторизации клиентов

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

  • ipoe + dhcp: удобен для абонентов - не нужно ничего настраивать на компьютере. Однако низкая безопасность т.к. злоумышленник может подделать свой мак-адрес и пользоваться интернетом за чужой счет
  • ipoe + dhcp + option82: удобен для абонентов - не нужно ничего настраивать на компьютере. Хорошая безопасность. Однако требует установки управляемых свичей и их настройку.
  • pppoe: относительно сложен для клиентов. Безопасность лучше чем при dhcp. Небольшое уменьшение пропускной способности внутри сети из-за пересылки дополнительных данных в pppoe протоколе.