Документация → Faq

Безопасность

Https доступ к админке

ee /usr/local/etc/apache22/httpd.conf
Для включения HTTPS, перемещаем курсор в конец конфига и раскомментируем
Include etc/apache22/extra/httpd-ssl.conf
Создаем сертификат
mkdir /usr/local/etc/apache22/ssl
chmod 700 /usr/local/etc/apache22/ssl
cd /usr/local/etc/apache22/ssl
openssl genrsa -out server.key -rand randfile -des3 2048
будет запрошен пароль для сертификата, вводим `1234`, учитывая, что через несколько шагов от него избавимся.
openssl req -new -x509 -key server.key -out server.crt -days 800
здесь 800 - количество дней работы сертификата.
Удаляем пароль в сертификате
openssl rsa -in server.key -out server.key
вводим `1234`.
chmod 400 server.key
Настройка ssl-конфига
ee /usr/local/etc/apache22/extra/httpd-ssl.conf
Редактируем файл httpd-ssl.conf
SSLCertificateFile "/usr/local/etc/apache22/ssl/server.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/server.key"
Перезапускаем apache
apachectl restart
Открываем в браузере
https://10.0.0.2/
Если не получаем приветствующего сообщения «It works!»:
Смотрим логи
tail /var/log/httpd-error.log

Пароли к mysql

Необходимо поменять пароли пользователям root и nodeny в mysql, если при установке вы использовали такие же как в документации.

Пароль root
mysqladmin -u root -p'hardpass' password new_VERY_hard_PASS
Пароль nodeny
mysql> use mysql;
mysql> update user set password=PASSWORD("NEWPASSWORD") where User='nodeny';
mysql> flush privileges;
mysql> quit

После изменения пароля nodeny измените его в sat.cfg.

Не логиниться под суперадмином

Создайте себе вторую учетную запись без прав суперадмина, этим вы обезопасите себя в случае когда отойдете от компьютера - если кто-то подойдет к нему, не сможет поменять настройки, добавить/изменить администраторов, удалить клиентов, платежи и т.д

Производительность

Gzip сжатие apache2

httpd.conf
AddOutputFilterByType DEFLATE text/html text/plain text/css

<Location />
SetOutputFilter DEFLATE

BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>

Продвинутый install

Инструкция по установке максимально упрощена для того, чтобы быстро получить работающее решение:

Распределенная система

NoDeny+ предоставляет хорошие возможности по масштабированию. Вы можете разделить NoDeny+ по серверам как для увеличения производительности так и для безопасности. Что можно делить:

Сервера распределенной системы могут работать под разными операционными системами, что позволяет использовать их преимущества для тех задач, с которыми они лучше справляются.

Все части системы взаимодействуют через БД, поэтому эта часть NoDeny+ должна быть доступна по сети как можно меньшими задержками. Более всего это относится к связке ядро - база данных.

NAS обычно располагаются в тех районах, которые они обслуживают. Если объем передаваемых данных о статистике трафика слишком нагружает канал к серверу с ядром, либо же высокие задержки при опросе коллекторов, возможно есть смысл установить коллекторы трафика не на районном NAS, а на центральном, агрегирующем трафик с районов.

Настройка удаленного NAS

Настройте NAS на маршрутизацию и NAT (если необходимо) так, чтобы клиенты получали доступ в интернет без управления NoDeny+.

В простейшем случае на удаленном NAS можно установить копию всего проекта, имеется ввиду содежимое каталога /usr/local/nodeny. Файл sat.cfg хранит параметры соединения с БД. Укажите в нем ip сервера с БД. Затем на сервере с БД создайте учетную запись nodeny с ip вашего NAS (в примере 1.2.3.4).

CREATE USER 'nodeny'@'1.2.3.4' IDENTIFIED BY 'hardpass';
GRANT SELECT ON `nodeny`.* TO 'nodeny'@'1.2.3.4';

Этим разрешается выполнение только команд SELECT, что улучшает безопасность системы в целом, поскольку NAS на районах обычно менее защищены чем центральные сервера. Таким образом, взлом NAS, например физическим доступом, не приведет к повреждению данных биллинга, а максимум к утечке информации.

Большую защищенность может дать не выдача глобального права SELECT на все таблицы, а лишь на определенные. Еще большую защищенность обеспечит создание VIEW для определенных групп клиентов и выдача права SELECT исключительно на необходимые маршрутизатору VIEW. Эти действия необходимо осуществить после настройки и понимания какие именно таблицы БД будут использоваться запускаемыми на NAS модулями.

Проверяем возможность соединения с БД модулей NAS
perl nokernel.pl -L

Вместо ошибки соединения должен вывести список доступных модулей ядра.

Копируйте rc.firewall из nodeny/etc/ в /etc, указав в нем правильный внешний интерфейс(ы). Если на маршрутизаторе не будет запущен коллектор трафика - удаляем строки с divert 1 и divert 2. Иначе устанавливаем ipcad.

Конфиг ipcad.conf от NoDeny+ необходимо модифицировать: указать на какой ip принимать запросы на получение трафика, а также с какого ip. Запросы будет отправлять ядро (допустим, оно запущено на сервере 1.2.3.1), поэтому добавляем строки:

rsh enable at 1.2.3.4;
rsh root@1.2.3.1 admin;

Здесь 1.2.3.4 - ip текущего NAS на интерфейсе, который смотрит в сторону серверной NoDeny+.

Разрешите в фаерволе трафик между 1.2.3.1 и 1.2.3.4. Недостаточно разрешить трафик только по порту rsh (по этому протоколу идет получение статистики), поскольку после соединения порты выбираются иные.

добавляем в rc.firewall текущего NAS
# NoDeny Kernel
${f} table 101 add 1.2.3.1
${f} add 2030 allow ip from "table(101)" to any

Установите автозапуск noserver.pl аналогично как при настройке standalone-сервера. Перезагружайте сервер (чтобы гарантированно удостовериться, что все запустится при следующем внезапном рестарте), включайте доступ «Всегда онлайн» тестируемым клиентам и проверяйте доступ в интернет.

Настройка pppoe сервера не отличается от standalone варианта. В конфиге mpd нужно указать ip Radius-а, который можно установить на сервере с БД. На сервере с Radius в фаерволе необходимо разрешить соединения от 1.2.3.4 на udp порты 1812 и 1813.

Сервер L2-авторизации сложно пробрасывать, поэтому рекомендуем запустить его отдельную копию на самом NAS, т.е. запустить nokernel с конфигом, в котором в состоянии run=>1 только модуль authserver. Модуль auth запускать не нужно - только одна копия этого процесса должна существовать в NoDeny+.

Для функционирования модуля L2-авторизации кроме SELECT необходима привилегия EXECUTE.

Паника! Все сломалось на standalone сервере

Заходим по ssh. Если не заходит - пингуем. Проблема с фаерволом маловероятна - правила для разрешения ssh идут самыми первыми.

Проверяем место на диске, запущен ли mysql
df -h
ps ax | grep mysql
Запущены ли nokernel.pl и noserver.pl
ps ax | grep pl
Клиентские pppoe соединения есть (интерфейсы ng)?
ifconfig

В админке клиенты авторизованы? На титульной странице отмечается время когда последний раз. Если больше минуты - проблема с авторизацией, тогда:

Обновление NoDeny+

cd /usr/local/nodeny
svn up
perl install.pl -x

Если вы внесли изменения в код NoDeny, а не создали патчи, то при svn up скорее всего будет конфликт. Возможно, вы сможете правильно «смержить» файлы. Если же не получилось, либо получилось с ошибкой - удалите файл и запустите svn up снова.

Внесение изменений

Вполне вероятно вам понадобится внести какие-либо изменения в код NoDeny+, например, поменять некоторые тексты, сообщения, а возможно удалить или добавить какую-нибудь фичу. Мы настоятельно рекомендуем не править напрямую существующий код, поскольку последущие обновления затрут ваши изменения и вам придется их заново вносить. NoDeny+ не стоит на месте, постоянно появляются новые возможности, поэтому необходимо время от времени обновлять его. Практически гарантированно обновления не нарушат работу вашей системы, они будут проходить безболезненно. В особых случаях, мы будем предупреждать в форуме о важных изменениях и их последствиях. В любом случае, svn позволяет очень просто откатиться к любой из предыдущих версий если вдруг что-то не заработает или просто появится чувство, что что-то не так.

В NoDeny+ есть система, которая накладывает патчи на существующий код. Она работает по иному принципу чем, скажем, утилита patch. Последняя требует, чтобы в файле присутствовал определенный фрагмент в определенной строке кода, если он будет иным, то патч не будет применен. Из-за такого поведения, зачастую не удастся наложить патч на иную версию файла, т.е. пачти пишутся под конкретную версию продукта.

В NoDeny+ мы постарались, чтобы патчи не зависели от версии биллинга. Здесь не изменяются какие-либо фрагменты кода, здесь вносятся цельные фрагменты кода в определенные места, называемые «хуками». Хук - это метка в файле, начинающаяся с фрагмента «#<HOOK>». При изменении файла, например, при выходе новой версии NoDeny+ или накладывании патча от иного модуля, положение метки может измениться, что не приведет к проблемам как в случае утилиты patch.

Давайте напишем патч «web-заглушки» - изменим текст сообщений для клиентов. Скопируем в папку /usr/local/nodeny/modules/MyNetwork файл web/lang/RU_cap.pl и переименуем его в create.lang.RU_cap.pl.

cd /usr/local/nodeny/modules/MyNetwork
cp ../../web/lang/RU_cap.pl create.lang.RU_cap.pl

Если имя файла начинается с «create.» - инсталлятор (install.pl -x) будет создавать новый файл, если «patch.» - модифицировать существующий. Вторая часть имени не важна, но автор рекомендует давать ей осмысленное имя. В данном случае мы намекнули (себе), что будет создан файл lang/RU_cap.pl. Имя создаваемого файла находится внутри самого файла и оно будет web/lang/RU_cap.pl. Чаще всего правятся файлы в папке web, поэтому мы решили в именах файлов опускать слово «web».

Абсолютно все созданные и измененные файлы будут иметь имена, начинающиеся со знака подчеркивания! Это фантомы. Фантом считается главней основного файла, т.е. если существует фантом - основной файл игнорируется. Если удалить фантом, данные будут браться из основного файла. Запомните: основные файлы не изменяются. Создается фантом на основе основного файла и в него вносятся изменения. При обновлении NoDeny+ обновляются основные файлы. install.pl -x заново создает фантомы на основе изменений в основных файлах.

Инсталлятор создаст web/lang/_RU_cap.pl, который будет иметь приоритет перед web/lang/RU_cap.pl, вернее, последний будет игнорироваться системой.

Так же, мы упомянули, что имя создаваемого файла задается в самом файле create.lang.RU_cap.pl, поэтому в начале этого файла добавляем строку:

#<ACTION> file=>'web/lang/RU_cap.pl',hook=>'new'

Также вносим какие-либо изменения в текст. Запускаем патчинг:

cd /usr/local/nodeny
perl install.pl -x
less web/lang/_RU_cap.pl

Если же необходимо внести какое-либо изменение в существующий файл, а не создавать новый, то, напоминаем, имя файла, начинаем с «patch.», скажем, patch.RU.pl с текстом:

#<ACTION> file=>'web/lang/RU.pl',hook=>'end'
$test_test = {
    msg => 'Yes!!!'
};

Здесь мы дали указание добавить текст «$test_test...» в файл web/lang/RU.pl в то место, где находится строка «#<HOOK>end». Если вам не хватает каких-либо хуков, т.е вы хотите внести изменение в место, где нет хука, обратитесь в форум - мы внесем этот хук в код.

Изменение меню клиентской статистики

Прочитав как следует вносить изменения в NoDeny, изменим название пункта меню «Liqpay» клиентской статистики. Для этого необходимо изменить языковые файлы web/lang/RU.pl и web/lang/UA.pl. Создадим файл modules/MyNetwork/patch.LANG.pl:

#<ACTION> file=>'web/lang/RU.pl',hook=>'user_menu_buttons'
    u_lpay                  => 'оплатить пластиковой картой',