Установка агента доступа задача посложнее - поскольку он управляет фаерволом, то сперва настроим его.
Команды bash
mv rc.firewall /etc/
ee /etc/rc.firewall
и в одной из первых строк меняем
ifOut='em0'
на имя интерфейса, который смотрит в "сторону интернета".
В предложенном /etc/rc.firewall правила обеспечивают:
- доступ по ssh к серверу;
- доступ к Web-статистике и админке NoDeny по tcp-портам 80 и 443;
- обслуживание DNS-запросов клиентов внутренней сети (предполагается, что на текущем маршрутизаторе запущен DNS-сервер);
- обслуживание l2-авторизации (авторизаторы NoDeny) клиентов внутренней сети;
- отправку трафика в коллектор его учета (правила с divert);
- разрешение доступа в интернет только разрешенных авторизованных клиентов, по требованию агента доступа noserver.pl.
Если сервер не перегружался, т.е. правила не сформированы, то запускаем вручную:
Команда bash
sh /etc/rc.firewall
Если получаем сообщение об ошибке примерно такое:
ipfw: getsockopt(IP_FW_ADD): Invalid argument
- ядро не скомпилировано с опцией IPDIVERT, не страшно - подгрузим как модуль ядра:
Команды bash
kldload ipdivert.ko
sh /etc/rc.firewall
rc.firewall должен запускаться при старте системы, поэтому:
Команда bash
echo firewall_enable=\"YES\" >> /etc/rc.conf
Для трансляции «серых» адресов в «белые» необходим NAT. Будем использовать pf nat:
Команда bash
ee /etc/pf.conf
Вставляем в файл pf.conf
set limit states 128000
set optimization aggressive
nat pass on em0 from 10.0.0.0/8 to any -> em0
nat pass on em0 from 192.168.0.0/16 to any -> em0
Обязательно вместо em0 укажите внешний интерфейс сервера, т.е тот, который смотрит с сторону провайдера. В это же значение должна быть установлена переменная ifOut в файле /etc/rc.firewall!
Команда bash
pfctl -N -f /etc/pf.conf
и если получаем сообщение:
pfctl: /dev/pf: No such file or directory
то подгрузим pf как модуль ядра и добавим в автозагрузку:
Команды bash
kldload pf.ko
pfctl -N -f /etc/pf.conf
pfctl -e
echo pf_load=\"YES\" >> /boot/loader.conf
echo pf_enable=\"YES\" >> /etc/rc.conf
В фаерволе предусмотрено, что трафик будет отправляться в коллектор, для его подсчета. В NoDeny есть возможность использования разных коллекторов. К примеру возьмем ipcad, который присутствует в портах:
Команды bash
cd /usr/ports/net-mgmt/ipcad && make install clean
echo ipcad_enable=\"YES\" >> /etc/rc.conf
По умолчанию, в конфиге /usr/local/etc/ipcad.conf много комментариев и несколько лишних настроек, удалим все и создадим «с нуля»:
Редактируем ipcad.conf
capture-ports enable;
interface divert port 1 netflow-disable;
interface divert port 2 netflow-disable;
rsh enable at 127.0.0.1;
rsh
root@127.0.0.1 admin;
rsh ttl = 3;
rsh timeout = 30;
dumpfile = ipcad.dump;
chroot = /tmp;
memory_limit = 50m;
Команда bash
ipcad -d
Запускаем агент доступа:
Команда bash
perl noserver.pl &
Авторизуемся с помощью программы-авторизатора либо включаем режим «всегда онлайн» у одной из клиентских записей и через несколько секунд:
Команда bash
ipfw table 10 list
видим в списке этот ip. Теперь пробуем получать доступ в интернет только при авторизации и только когда учетная запись незаблокирована.
Автозапуск агентов с запуском системы.
Команда bash
cp /usr/local/nodeny/rc.d/* /usr/local/etc/rc.d/
После того это все сделал, агент перестал соединяться с сервером, пинги идут, в логах видно что l2auth работает, фаервол не блокирует. В чем может быть проблема? Может кто сталкивался?