SOHOUnix & Evil Traffic Counter


[13plus7@YouTube]  [электроника для обработки аналоговых сигналов (youtube)]  [13plus7@YouTube - новый вариант]  [13plus7@YouTube - новое видение (в работе) [электроника для обработки аналоговых сигналов
[ETC]  [AskMe 1_2_3]  [PXE_OS_install]  [RIS linux]  [Vuze]  [Deluge
[картинки_А]  [картинки_Б]  [mmaketchup@del.icio.us]  [Гостевая]  [Напишите мне]

Имеем: сервер с установленной ubuntu 8.04 debian 6.0, настроенные два интерфейса. Делаем следующее:
1. Устанавливаем apache2, mysql-server: "apt-get install apache2 mysql-server" (считаем, что perl уже установлен)
2. В директорию "/usr/lib/cgi-bin/" необходимо поместить файлы программы (скачать можно внизу страницы), делаем эту директорию активной: "cd /usr/lib/cgi-bin/", устанавливаем права командой "chmod 755 *"
3. Создаем необходимую базу данных в mysql: "mysql -u root -p<dump"
(потребуется ввести рутовый пароль mysql)
4. Правим файл "/usr/lib/cgi-bin/billing.conf"

[environment]-секция описать конкретное окружение;
поменять содержимое переменной syslogd_pid на "/var/run/syslogd.pid" (по умолчанию "/var/run/rsyslogd.pid")
[admin]-секция указать ip-адрес админской машины
5. Подготовим раздел для логов iptables (из-за возможной большой нагрузки используется ramfs):

"mkdir /media/log"

(masq.sh сюда подмонтирует ramfs
!!!ПЕРЕД МОНТИРОВАНИЕМ ВСЕ УДАЛИТСЯ ИЗ /media/log!!!
если раскомментировать строчку в masq.sh
)
6. Правим файл"masq.sh" под конкретное окружение

копируем его в директорию "/etc/init.d/"

устанавливаем ему необходимые права "chmod 755 /etc/init.d/masq.sh"

выполняем "/etc/init.d/masq.sh",
(включение форвардинга, nat, инициализация iptables)
7. Выполняем:
"/usr/lib/cgi-bin/cycle.pl"
(создание /etc/init.d/ipt.sh, /etc/init.d/tc.sh)

"/etc/init.d/ipt.sh"
(правила iptables для клиентов)

"/etc/init.d/tc.sh"
8. Выполнение скриптов при перезагрузке (желательно до cron):
update-rc.d masq.sh defaults
update-rc.d ipt.sh defaults
update-rc.d tc.sh defaults
"cd /etc/rc2.d"

"ln -s /etc/init.d/masq.sh S60masq.sh"

"ln -s /etc/init.d/tc.sh S61tc.sh"

"ln -s /etc/init.d/ipt.sh S62ipt.sh"
9. В "/etc/crontab" добавляем строчки:
"* * * * * root cd /usr/lib/cgi-bin/ && ./cycle.pl 1>/dev/null 2>/dev/null&& ./ipt_parser.pl"
(запуск cycle.pl и парсера логов iptables каждую минуту)

"*/15 * * * * root cd /usr/lib/cgi-bin/ && ./summator.pl"

10. Настройка sysklogd (rsyslog) для сбора логов iptables:
"nano /etc/syslog.conf"(/etc/rsyslog.conf)
10a. в конец файла добавляем строчку:

"kern.warning -/media/log/iptables.log"
10b. Не хочется, чтобы логи засоряли другие файлы, кроме iptables.log (для этого требуется во все правила из syslog.conf, под которые попадают сообщения от ядра уровня warning, добавить исключение - ";kern.!=warning"):

"kern.*;kern.!=warning -/var/log/kern.log"
"*.*;kern.!=warning;auth,authpriv.none -/var/log/syslog"
Аналогично в разделе описывающем /var/log/messages заменить *.=warning на *.=warning;kern.!=warning
10c. Не забыть перезапустить sysklogd: "/etc/init.d/sysklogd restart"
11. Интерфейс администратора (заходить с ip админа) - http://"адрес_сервера"/cgi-bin/admin.pl
интерфейс пользователя - http://"адрес_сервера"/cgi-bin/stat.pl

Обеспечение безопасности:
1. В домашней директории некоторого пользователя создаем пароль:
"htpasswd -c /home/cool_user/.htpasswd cool_user"
("cool_user" заменяем на имя имеющегося в системе пользователя)
2. Правим файл "/etc/apache2/apache2.conf"
В конец конфига добавляем строчки:
("cool_user" заменяем на имя имеющегося в системе пользователя)
<Directory "/usr/lib/cgi-bin/">
<Files admin.pl>
AuthType Basic
AuthName "Basic"
AuthUserFile /home/cool_user/.htpasswd
Require user cool_user
</Files>
<Files edit.pl>
AuthType Basic
AuthName "Basic"
AuthUserFile /home/cool_user/.htpasswd
Require user cool_user
</Files>
</Directory>
3. Перезапустить apache2 "/etc/init.d/apache2 restart"

ВНИМАНИЕ! ВО ВСЕХ ПРЕДЫДУЩИХ ВЕРСИЯХ ВОЗМОЖНА УЯЗВИМОСТЬ SQL-injection В СКРИПТАХ. В этой версии убрана в только в stat.pl. Типа сорри.
1.4.2 (должно работать в опере) - много багов, использовать осторожно, ничего не гарантирую
cycle.pl...основная программа
cool_env.pm...пакет с основными функциями
conf.pm...пакет для работы с конфигурационным файлом
billing.conf...конфигурационный файл
summator.pl...периодическое суммирование трафика (служ. нужды)
masq.sh...инициализация iptables
admin.pl...Web-интерфейс для админа
etc.css...css для admin.pl (этот файл необходимо поместить в /var/www/)
edit.pl...редактирование mysql-базы
ipt_parser.pl...занесение логов iptables в mysql
ipstat.pl...предварительный анализ логов iptables
stat.pl...Web-интерфейс для клиентов
ustat.pl...расширенная статистика
techstat.pl...состояние скриптов, базы, некоторые логи
dump...скрипт для создания mysql-базы данных


[Screenshots v1.1]


ЧаВо (FAQ) – Ча-стые Во-просы (Frequently Asked Questions):
  1. после установки пропал интернет – видимо вы работаете с компьютера, не добавленного в список пользователей, добавьте ip компьютера, установите лимиты
  2. как добавить пользователя?
    введите желаемый ip-адрес в поле ввода вверху страницы (по умолчанию выставлено значение '0.0.0.0') и нажмите кнопку add. По умолчанию пользователь заблокирован – требуется установить лимит на входящий/исходящий трафик
  3. как убрать лимит на входящий/исходящий трафик
    в крайне правом поле ввода нужно ввести 777 в любое поле (входящий/исходящий лимит) и нажать кнопку ok - это отменит и входящий и исходящий лимит + см. скриншоты
  4. вопрос по интерфейсу: что означают колонки в основном окне
    см. скриншоты
  5. как удалить пользователя
    нужно кликнуть по кнопке del для данного пользователя, появится запрос на подтверждения удаления, после чего нужно нажать на ссылку "confirm del"
  6. почему с сервера на котором установлен etc файлы скачиваются так медленно (~300kbps)
    etc устанавливает ограничение на скорость скачивания с lan-интерфейса, по умоланию это 300kbps (по умолчанию все новые пользователи даже если лимит скорости не установлен будут работать с лимитом 300kbps)
  7. совместимость с файервол: у меня уже есть файрвол-скрипт, как его выполнить в неизменном виде
    при установке (п8) мы указывали, что скрипты etc для iptables (masq.sh и ipt.sh) должны выполняться последовательно и до cron. Если вы хотите чтобы ваш скрипт работал в неизмененном виде он должен выполняться после masq.sh и до ipt.sh
    "cd /etc/rc2.d"
    "ln -s /etc/init.d/masq.sh S60masq.sh"
    "ln -s /etc/init.d/мой_скрипт.sh S61мой_скрипт.sh"
    "ln -s /etc/init.d/ipt.sh S62ipt.sh"
    (не забывайте, что masq.sh может устанавливать ppp-соединение, что может повлиять на выполнение вашего скрипта)
  8. iptables -A не работает для таблицы filter (таблица по умолчанию)
    etc работает с iptables и tc. Поэтому нужно понимать что вы работаете с измененным iptables оружением. Для того чтобы правила работали их нужно добавлять с ключом -I или разобраться с форматом файервола etc (см. след. пункт)
  9. совместимость с файрвол – как добавить custom-правила для пользователя
    cкажем нужно добавить правило для пользователя 192.168.0.20 протокол tcp входящий трафик:
    “iptables -I TCP_IN_3232235540 остальные_параметры_правила”
    где 3232235540 – десятеричное представление ip-адреса пользователя (легко узнать при помощи функции “inet_aton” из mysql:
    select inet_aton(“192.168.0.20”);)
  10. исчезли custom-правила для пользователя после блокировки/разблокровки. Почему?
    таков алгоритм работы etc – боюсь придется их выполнять вручную (можно и перезагрузиться, если файрвол выполняется скриптом при загрузке)
  11. заканчивается пространство на диске
    в разделе techstat главной страницы приведены размеры mysql-таблиц evil_billing'а. Скорее всего разрослась таблица e_chk_ipkt. Нужно присоединиться к серверу через ssh, присоединиться к mysql и, например, удалить все записи из этой таблицы:
    mysql -u bill -p (по умолчанию пароль – без кавычек “passw0rd”, хранится в billing.conf);
    use evil_billing;
    delete from e_chk_ipkt
  12. какие пакеты попадают под лог
    под лог попадают все форвард-пакеты всех пользователей, но не больше 10/сек для tcp, udp (отдельно входящий/исходящий) и все icmp
  13. проблема syslogd – или как установить etc в debian
    в конфигурационном файле имеется указание на rsyslog – логгер в debian по умолчанию (с ним приведенная в инструкции схема не работает вообще), поэтому для установки etc в debian нужно заменить rsyslog на sysklogd (“apt-get install sysklogd”)


Архив
Про войну
(хочу поделиться):
Quake_1:
Сайт создан в системе uCoz