Сервер в кармане, или просто о сложном!
Много интересного на канале

Безопасность компьютерной сети: Сканер в вопросах и ответах

Обновлено: 01.07.2025

Что такое сканер?

Сканер — это программа, предназначенная для автоматизации процесса поиска слабостей в защите компьютеров, подключенных к сети в соответствии с протоколом TCP/IP. Наиболее совершенные сканеры обращаются к портам TCP/IP удаленного компьютера и в деталях протоколируют отклик, который они получают от этого компьютера. Запустив сканер на своем компьютере, пользователь, скажем, из подмосковной Малаховки, лаже не выходя из дома, может найти бреши в защитных механизмах сервера, расположенного, например, в Лос-Анджелесе.

Каковы системные требования для работы со сканерами?

Большинство сканеров предназначено для работы в среде операционном системы UNIX, хотя к настоящему времени такие программы имеются практически для любой операционной системы. Возможность запустить сканер на конкретном компьютере зависит от операционной системы, под управлением которой работает этот компьютер, и от параметров подключения к Internet. Есть сканеры, которые функционируют только в среде UNIX, а с остальными операционными системами оказываются несовместимыми. Другие отказываются нормально работать на устаревших компьютерах с Windows 3.11 и с медленным (до 14 400 бит/с) доступом к Internet, осуществляемым по коммутируемым линиям. Такие компьютеры будут надоедать сообщениями о переполнении стека, нарушении прав доступа или станут просто зависать.

Критичным является и объем оперативной памяти компьютера. Сканеры. которые управляются при помощи командной строки, как правило, более умеренны в своих требованиях, предъявляемых к объему оперативной памяти. А самыми "прожорливыми" являются сканеры, снабженные оконным графическим интерфейсом пользователя.

Трудно ли создать сканер?

Написать сканер не очень трудно. Для этого достаточно хорошо знать протоколы TCP/IP, уметь программировать на С или Perl и на языке сценариев, а также разбираться в программном обеспечении сокетов. Но и в этом случае не следует ожидать, что созданный вами сканер принесет большую прибыль, поскольку в настоящее время предложение на рынке сканеров значительно превышает спрос на них. Поэтому наибольшая отдача от усилий, вложенных в написание сканера, будет скорее моральной (от осознания хорошо выполненной работы), чем материальной.

Что не по силам даже самому совершенному сканеру?

Не следует переоценивать положительные результаты, которых можно достичь благодаря использованию сканера. Действительно, сканер может помочь выявить дыры в защите хост-машины, однако в большинстве случаев информацию о наличии этих дыр сканер выдает в довольно завуалированном виде, и ее надо еще уметь правильно интерпретировать. Сканеры редко снабжаются достаточно полными руководствами пользователя. Кроме того. сканеры не в состоянии сгенерировать пошаговый сценарий взлома исследуемой компьютерной системы. Поэтому для эффективного использования сканеров на практике прежде всего необходимо научиться правильно интерпретировать собранные с их помощью данные, а это возможно только при наличии глубоких знаний в области сетевой безопасности и богатого опыта.

Насколько легальны сканеры?

Обычно сканеры создаются и используются специалистами в области сетевой безопасности. Как правило, они распространяются через сеть Internet. чтобы с их помощью системные администраторы могли проверять компьютерные сети на предмет наличия в них изъянов. Поэтому обладание сканерами, равно как и их использование на практике, вполне законно. Однако рядовые пользователи, не являющиеся системными администраторами. должны быть готовы к тому, что, если они будут применять сканеры для обследования чужих сетей, то могут встретить яростное сопротивление со стороны администраторов этих сетей. Более того, некоторые сканеры в процессе поиска брешей в защите компьютерных сетей предпринимают такие действия, которые по закону могут квалифицироваться как несанкционированный доступ к компьютерной информации, или как создание, использование и распространение вредоносных программ, или как нарушение правил эксплуатации компьютеров, компьютерных систем и сетей. И если следствием этих деяний стало уничтожение, блокирование, модификация или копирование информации, хранящейся в электронном виде, то виновные в них лица в соответствии с российским законодательством подлежат уголовному преследованию. А значит, прежде чем начать пользоваться первым попавшимся под руку бесплатным сканером для UNIX-платформ, стоит убедиться, а не копирует ли случайно этот сканер заодно и какие-нибудь файлы с диска тестируемой им хост-машины (например, файл password из каталога /ETC).

В чем различие между сканерами и сетевыми утилитами?

Часто к сканерам ошибочно относят утилиты типа host, rusers, finger. Traceroute, Showmount. Связано это с тем, что, как и сканеры, данные утилиты позволяют собирать полезную статистическую информацию о сетевых службах на удаленном компьютере. Эту информацию можно затем проанализировать на предмет выявления ошибок в их конфигурации.

Действительно, сетевые утилиты выполняют ряд функций, которые характерны для сканеров. Однако в отличие от последних использование этих утилит вызывает меньше подозрений у системных администраторов. Выполнение большинства сетевых утилит на удаленной хост-машине практически не оказывает никакого влияния на ее функционирование. Сканеры же зачастую ведут себя как слон в посудной лавке и оставляют следы, которые трудно не заметить. Кроме того, хороший сканер — явление довольно редкое, а сетевые утилиты всегда под рукой. К недостаткам сетевых утилит можно отнести то, что приходится выполнять вручную слишком большую работу, чтобы добиться того же результата, который при помощи сканера получается автоматически.

Упомянутые выше сетевые утилиты можно встретить в любой операционной системе семейства UNIX. Однако предоставляемые ими возможности для сбора данных об удаленной хост-машине интересуют не только пользователей UNIX. Поэтому неудивительно, что многие из jthx утилит были перенесены в другие операционные системы.

Для Windows 95/98 имеются программные пакеты NetScan Tools (http://www.eskimo.com/~nwps/index.html). Network Toolbox (http://www.jriver. com/netbox.html) и TCP/IP Surveyor (http://www.rocketdownload.com/details/inte/wssrv32nsrc.htm), которые реализуют выполнение сетевых утилит host, rusers, finger, Traceroute, ping, WHOIS. Последний из упомянутых пакетов не только осуществляет сбор информации о сети и подключенных к ней компьютерах, но и представляет собранную таким образом информацию в виде графа, вершинами которого служат найденные в сети маршрутизаторы, серверы и рабочие станции.

Пользователям персональных компьютеров типа Macintosh можно посоветовать обратить внимание на программные пакеты МасТСР Watcher (http://waldo.wi.mit.edu/WWW/tools/util/Mac/MacTCP_Watchei), Querylt! (http://tucows.online.ru/mac/adnload/dlqueryitinac.html) и What Route (http://homepages.ihug.co.nz/~bryanc).

Источник: http://www.computerbooks.ru/books/Security/Book-Protection-to-Information/4/Index2.htm

Сокрытие PHP

Обновлено: 01.07.2025

В общем случае внесение неясности ненамного улучшает защищенность системы. Но бывают случаи, когда следует использовать малейшую возможность.

Несколько несложных методик могут помочь вам скрыть PHP, что усложняет работу потенциального взломщика, который пытается найти брешь в вашей системе. Установив опцию expose_php = off в конфигурационном файле php.ini, вы уменьшите количество доступной хакеру информации.

Еще одна методика заключается в настройке веб-сервера таким образом, чтобы он обрабатывал файлы с различными расширениями как PHP-скрипты. Это можно указать как в .htaccess файлах, так и конфигурационном файле Apache. В таком случае вы сможете использовать при написании кода нестандартные расширения:

Пример 32-1. Маскировка PHP под другие языки программирования
# Теперь PHP-скрипты могут иметь те же расширения, что и другие языки программирования
AddType application/x-httpd-php .asp .py .pl

Или скрыть его совсем:

Пример 32-2. Использование неизвестных расширений для PHP-скриптов
# Теперь PHP-скрипты могут иметь неизвестные типы файлов
AddType application/x-httpd-php .bop .foo .133t

Также можно спрятать его под видом HTML-кода, что приведет к потере производительности, так как все HTML файлы будут обрабатываться как PHP-код:

Пример 32-3. Маскировка PHP-кода под html-файлы
# Теперь PHP-скртпы могут выглядеть как обыкновенный HTML
AddType application/x-httpd-php .htm .html

Чтобы достичь желаемого эффекта, вы должны переименовать все ваши скрипты в соответствии с выбранным вами расширением. Описанное в этом разделе документации повышение безопасности через сокрытие PHP имеет мало недостатков при небольших затратах.

источник: http://php.ru/manual/security.hiding.html

Защита хранилища базы данных

Обновлено: 01.07.2025

SSL/SSH защищает данные, которыми обмениваются клиент и сервер, но не защищают сами данные, хранимые в базе данных. SSL - протокол шифрования на уровне сеанса передачи данных.

В случае, если взломщик получил непосредственный доступ к БД (в обход веб-сервера), он может извлечь интересующие данные или нарушить их целостность, поскольку информация не защищена на уровне самой БД. Шифрование данных - хороший способ предотвратить такую ситуацию, но лишь незначительное количество БД предоставляют такую возможность.

Наиболее простое решение этой проблемы - установить вначале обыкновенный программный пакет для шифрования данных, а затем использовать его в ваших скриптах. PHP, в таком случае, может помочь вам в работе с такими расширениями как Mcrypt и Mhash, реализующими различные алгоритмы криптования. При таком подходе скрипт вначале шифрует сохраняемые данные, а затем дешифрует их при запросе. Ниже приведены примеры того, как работает шифрование данных в PHP-скриптах.

В случае работы со скрытыми служебными данными их нешифрованное представление не требуется (т.е. не отображается), и, как следствие, можно использовать хеширование. Хорошо известный пример хэширования - хранение MD5-хеша от пароля в БД, вместо хранения оригинального значения. Более детальная информация доступна в описании функций crypt() and md5().

Использование хешированных паролей
<?php
// сохранение хешированного пароля
$query  = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
            addslashes($username), md5($password));
$result = pg_exec($connection, $query);

// проверка введенного пользователем логина и пароля на корректность
$query = sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",
            addslashes($username), md5($password));
$result = pg_exec($connection, $query);

if (pg_numrows($result) > 0) {
    echo "Welcome, $username!";
}
else {
    echo "Authentication failed for $username.";
}
?>

источник: http://php.ru/manual/security.database.storage.html

Настройка Squid

Обновлено: 01.07.2025

Автор: erasha@bsdportal.ru

Данная статья описывает настройку прокси сервера SQUID версии 2.5.14 с использованием аудентификации по mac адресу с ограничением скорости закачки с помощью пулов задержки, анализа статистики лога с помощью sarg-2.2. А также в кратце описан процесс поднятия WWW сервера на основе apache-1.3.36 для удобства доступа до статистики полученной sarg. Для тех, кто торопиться, может помочь статья "Быстрая настройка Squid". А тех, кто считает, что все равно с быстрой настройки сюда же и вернуться, прошу читать дальше.

Настройка сервера FreeBSD с поддержкой NAT

Для начала надо пересобрать ядро с поддержкой DIVERT для NAT и ipfw.

Добавляем вот это в конфигурационный файл ядра:

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_FORWARD
options         IPFIREWALL_FORWARD_EXTENDED
options         IPDIVERT

пересобираем ядро и устанавливаем его. Затем в файл /etc/rc.conf добавляем

firewall_enable="YES"
firewall_script="/etc/rc.ipfw1"
natd_enable="YES"
natd_interface="fxp0"

первая строка включает firewall ipfw, вторая указывает какой скрипт указания правил использовать при загрузке, третья включает NAT, чертвертая определяет на каком внешнем сетевом интерфейсе будет работать NAT. В моем случае внешний интерфейс fxp0.

потом создаем файл rc.ipfw1 и ставим ему безопасные права

#cd /etc
#touch rc.ipfw1
#chmod 600 rc.ipfw1

с таким содержанием

#!/bin/sh
 fwcmd="/sbin/ipfw"
 ${fwcmd} -f flush 
# VAR
 if_inet="fxp0"              # внешний сетевой интерфейс
 ip_inet="aaa.aaa.aaa.aaa"   # ip внешнего сетового интерфейса
 net="bbb.bbb.b.b/24"        # ваша подсетка
# Local
 ${fwcmd} add allow all from any to any via lo0
 ${fwcmd} add deny all from any to 127.0.0.0/8
 ${fwcmd} add deny all from 127.0.0.0/8 to any
# тут разрешаю SSH чтоб безбоязненно можно было удаленно
# править правила которые идут дальше
 ${fwcmd} add allow tcp from any to any ssh
 ${fwcmd} add allow tcp from any ssh to any
# anti spoofing #1
 ${fwcmd} add deny all from any to 10.0.0.0/8 via ${if_inet}
 ${fwcmd} add deny all from any to 172.16.0.0/12 via ${if_inet}
 ${fwcmd} add deny all from any to 192.168.0.0/16 via ${if_inet}
 ${fwcmd} add deny all from any to 0.0.0.0/8 via ${if_inet}
 ${fwcmd} add deny all from any to 169.254.0.0/16 via ${if_inet}
 ${fwcmd} add deny all from any to 192.0.2.0/24 via ${if_inet}
 ${fwcmd} add deny all from any to 224.0.0.0/4 via ${if_inet}
 ${fwcmd} add deny all from any to 240.0.0.0/4 via ${if_inet}
# NAT
 ${fwcmd} add divert 8668 ip from ${net} to any out via ${if_inet}
 ${fwcmd} add divert 8668 ip from any to ${ip_inet} in via ${if_inet}
# anti spoofing #2
 ${fwcmd} add deny all from 10.0.0.0/8 to any via ${if_inet}
 ${fwcmd} add deny all from 172.16.0.0/12 to any via ${if_inet}
 ${fwcmd} add deny all from 192.168.0.0/16 to any via ${if_inet}
 ${fwcmd} add deny all from 0.0.0.0/8 to any via ${if_inet}
 ${fwcmd} add deny all from 169.254.0.0/16 to any via ${if_inet}
 ${fwcmd} add deny all from 192.0.2.0/24 to any via ${if_inet}
 ${fwcmd} add deny all from 224.0.0.0/4 to any via ${if_inet}
 ${fwcmd} add deny all from 240.0.0.0/4 to any via ${if_inet}
# все остальное разрешить (желательно только то что нужно =) )
 ${fwcmd} add allow all from any to any

сразу отмечу для создания правил безопастности более индивидуально посетите хороший сайт http://ipfw.ism.kiev.ua/ посвященный настройки firewall ipfw и эти правила для aaa.aaa.aaa.aaa реального IP

Изменения вносить лучше в /etc/rc.conf и создание /etc/rc.ipfw1 до перезагрузки после установки пересобранного ядра.

Собственно настройка Squid

Устанавливаем Squid командами:

#cd /usr/ports/www/squid
#make config

или так

cd /usr/ports/www/squid && make config

ставим галочки напротив

SQUID_DELAY_POOLS
SQUID_ARP_ACL
SQUID_RCNG

к уже установленным. Первая строка включает поддержку пулов задержки для ограничения скорости, вторая включает поддержку использования в ACL МАС адресов, третья указавает на создание загрузочного скрипта в rc.d . Нажимаем ОК. Потом делаем

#make install clean

Затем идем в /usr/local/etc/squid создаем файл squid.conf с безопасными правами

#touch squid.conf
#chmod 600 squid.conf

или можно, как вариант, скопировать еще не настроенный конфигурационный файл Squid по умолчанию и его редактировать.

#cp ./squid.conf.default ./squid.conf

У меня squid.conf примерно имеет такое содержание:

http_port 3128
icp_port 3130
hierarchy_stoplist cgi-bin ?

acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY

cache_mem 32 MB

maximum_object_size 2000 KB
maximum_object_size_in_memory 1000 KB

cache_dir ufs /usr/local/squid/cache 2000 16 256

auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localnet src 192.168.0.0/24
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443 563     # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl Icq_port port 5190          # icq
acl Irc_port port 6667          # irc
acl MSN_port port 1863          # msn messager
acl CONNECT method CONNECT

acl erasha arp XX:XX:XX:XX:XX:XX
acl user1 arp XX:XX:XX:XX:XX:XX
acl user2 arp XX:XX:XX:XX:XX:XX
acl user3 arp XX:XX:XX:XX:XX:XX

acl stop_files url_regex -i .mp3$ .vqf$ .rpm$ .avi$ .mpeg$ .rm$ 
.raw$ .wav$ .mov$ .ogg$ .exe$ .com$
acl StopWWW dstdomain "/usr/local/etc/squid/stopWWW.acl"

http_access allow erasha

http_access deny stop_files
http_access deny StopWWW

http_access allow user1
http_access allow user2
http_access allow user3

http_access allow CONNECT Icq_port
http_access allow localnet Icq_port
http_access allow CONNECT Irc_port
http_access allow localnet Irc_port
http_access allow CONNECT MSN_port
http_access allow localnet MSN_port
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all

http_reply_access allow all

icp_access allow all

visible_hostname proxy

icon_directory /usr/local/etc/squid/icons

error_directory /usr/local/etc/squid/errors/Russian-koi8-r

delay_pools 3

delay_class 1 2
delay_parameters 1 6000/2000 3000/2000
delay_access 1 allow user1
delay_access 1 deny all

delay_class 2 2
delay_parameters 2 15000/3000 15000/3000
delay_access 2 allow user2
delay_access 2 deny all

delay_class 3 2
delay_parameters 3 60000/3000 60000/3000
delay_access 3 allow user3
delay_access 3 deny all

coredump_dir /usr/local/squid/cache

Файл настроек Squid изнутри

http_port 3128

указываем порт для запросов клиентов, можно задать 8080.

icp_port 3130

указываем номер порта Internet Cache Protocol (ICP) для открытия возможности использования кешей соседних squid прокси.

hierarchy_stoplist cgi-bin ?

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

acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY

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

cache_mem 32 MB

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

maximum_object_size 2000 KB

максимальный размер объектов, которые будут сохранены на диск. По умолчанию стоит 4096 килобайт.

maximum_object_size_in_memory 1000 KB

максимальный размер объектов, которые будут сохранены в кэше. По умолчанию стоит 4096 килобайт.

cache_dir ufs /usr/local/squid/cache 2000 16 256

указывает сквиду, где сохранять кешируемые файлы. Указывает отдать под кеш 2000 мегабайт и создать 16 и 256 соответственно каталогов 1го и 2го уровня. Про каталоги сами все поймете, когда загляните в место, где у сквида кэш.

auth_param basic children 5

количество процессов авторизации запросов.

auth_param basic realm Squid proxy-caching web server

указываем надпись, которая будет выводиться с запросом авторизации.

auth_param basic credentialsttl 2 hours

указываем время хранения авторизации, в данном случае 2 часа.

auth_param basic casesensitive off

указываем, что регистр введенных данных роли не играет.

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320

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

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localnet src 192.168.0.0/24
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443 563     # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl Icq_port port 5190          # icq
acl Irc_port port 6667          # irc
acl MSN_port port 1863          # msn messager
acl CONNECT method CONNECT

Здесь с помощью acl мы задаем localhost, локальную сеть, порты на которые мы разрешим выходить программам через наш прокси. Также указываем manager протокол cache_object, используемого для управления и мониторинга кеша.

acl CONNECT method CONNECT

включает поддержку проброски соединения с помощью команды протокола CONNECT.

acl erasha arp XX:XX:XX:XX:XX:XX      
acl user1 arp XX:XX:XX:XX:XX:XX
acl user2 arp XX:XX:XX:XX:XX:XX                
acl user3 arp XX:XX:XX:XX:XX:XX

с помощью acl...arp указываем МАС адреса сетевых карт пользователей, которым мы в дальнейшем разрешать/запрещать доступ к интернету. вместо XX:XX:XX:XX:XX:XX указываем МАС адрес сетевой карты компьютера пользователя. Скрипт для получения МАС адреса будет приведен в приложении.

acl stop_files url_regex -i .mp3$ .vqf$ .rpm$ .avi$ .mpeg$ .wav$ 
.mov$ .ogg$ .exe$ .com$

здесь мы указываем расширения файлов которые мы запретим для закачки.

acl StopWWW dstdomain "/usr/local/etc/squid/stopWWW.acl"

здесь указываем файл в котором указываем адреса сайтов на которые нельзя ходить юзерам. файл имеет такой вид

.zaycev.net
.rmp.ru
.berkova.net
.sexmovies.ru
.mp3real.ru
.erovideo.ru
.muzudar.ru

это как бы подборка сайтов sex содержания и с mp3, т.к. в stop_files мы не закрыли архивы, а на некоторых сайтах лежат mp3 с расширением например rar, и пользователи могут закачивать музыку потом меняя расширение у файлов, поэтому я решил запрещать сами сайты.

http_access allow erasha
http_access deny stop_files
http_access allow user1
http_access allow user2
http_access allow user3

Здесь мы разрешаем с помошь http_access allow доступ до интернета, а используя http_access deny запрещаем выкачивать stop_files с расширениями указанными выше. Обратите внимание что разрешение доступа до интернета для пользователя erasha стоит выше запрета на закачку stop_files. Это сделано для того чтобы на пользователя erasha не действовал запрет не закачку stop_files, а на остальных пользователей которым разрешен доступ до интернета указанным после запрета на stop_files этот запрет действует.

http_access allow CONNECT Icq_port
http_access allow localnet Icq_port
http_access allow CONNECT Irc_port
http_access allow localnet Irc_port
http_access allow CONNECT MSN_port
http_access allow localnet MSN_port
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all

В этих строках разрешаем использования метода CONNECT для локальной сети на Icq_port,Irc_port,MSN_port, разрешаем доступ maneger доступ до localhost. Запрещаем использование всех портов кроме Safe_ports, запрещаем метод CONNECT на все порты кроме SSL_ports, и в конце все запрещаем. Знак “!” используется как НЕ, т.е. если дословно http_access deny !Safe_ports запретить http доступ НЕ Safe_ports.

http_reply_access allow all

Разрешаем ответы на все запросы.

icp_access allow all

Разрешаем доступ до icp всем.

visible_hostname proxy

это имя будет упоминаться в сообщениях об ошибках.

icon_directory /usr/local/etc/squid/icons

Указываем католог с иконками

error_directory /usr/local/etc/squid/errors/Russian-koi8-r

Указываем католог с шаблонами страниц ошибок на нужном языке и в нужной кодировке, в нашем случае язык русский в Koi8-r кодировке

delay_pools 3

delay_class 1 2
delay_parameters 1 6000/2000 3000/2000
delay_access 1 allow user1
delay_access 1 deny all

delay_class 2 2
delay_parameters 2 15000/3000 15000/3000
delay_access 2 allow user2
delay_access 2 deny all

delay_class 3 2
delay_parameters 3 60000/3000 60000/3000
delay_access 3 allow user3
delay_access 3 deny all

Здесь мы создаем пулы задержки для ограничения по скорости пользоветелей. Пулы задержки делятся на три класса. Первый класс управляет одним потоком на всех кому резрешено использовать его. Используют когда достаточно задать скорость для всех без какого либо разграничения. Второй класс уже управляет общим потоком и управление потоком для каждого хоста из. Используется уже если нужно в сети распределить поток между хостами. Третий класс управляет общим потоком, потоком на всю подсеть и потоком для каждого хоста. Используется если есть необходимость распределить поток между подсетями и отдельными хостами в этих подсетях.

delay_pools 3

указываем сколько у нас будет всего пулов задержки, в нашем случае три.

delay_class 1 2

здесь указываем номер пула и его класс, т.е. пул номер один второго класса.

delay_parameters 1 6000/2000 3000/2000

здесь задаем параметры пула. Указаываем номер пула которому устанавливаем параметры, у нас №1, далее идет указание ограничения по скорости этого пула. 6000/2000 указывает что после закачки более 2000 байт установить скорость не выше 6000 байт/с, до 2000 байт закачка происходит без какого либо ограничения по скорости. исходя из того что у нас пул второго класса такое ограничение мы установили на общий поток, далее 3000/2000 указываем что каждому хосту после закачки более 2000 байт установить скорость 3000 байт.

вот как бы шаблон по которому думаю более нагладно разобраться

delay_parameters 3 total_rest/total_max  - 1 класс
delay_parameters 3 total_rest/total_max ind_rest/ind_max  - 2 класс
delay_parameters 3 total_rest/total_max net_rest/net_max ind_rest/ind_max  - 3 класс

где total - на всех net - на подсеть ind - на отдельный адрес rest - скорость (в байт/сек) max - размер трафика при превышении которого устанавливается ограничение по скорости (в байтах)

еще если указать так

delay_parameters А -1/-1

то -1/-1 это указывает на отсутствие каких либо ограничений для пула А.

delay_access 1 allow user1

Разрешаем user1 успользовать пул номер 1.

delay_access 1 deny all

Запрещаем все остальным использовать пул номер 1.

Следующие пулы аналогичны первому по структуре.

coredump_dir /usr/local/squid/cache

Указываем куда сбрасывать core.

И на последок создадим swap директорию для squid

# /usr/local/sbin/squid -z

Добавим SQUID в автозагрузку (в /etc/rc.conf)

squid_enable="YES"

Запустим squid

# /usr/local/sbin/squid -D

Так вроде все с squid разобрались.

Теперь приступим к установке анализатора логов squid-a sarg -2.2

#cd /usr/ports/www/sarg
#make install clean

или так

cd /usr/ports/www/sarg && make install clean

Затем идем в /usr/local/etc/sarg создаем файл sarg.conf с безопастными правилами

#touch sarg.conf
#chmod 600 sarg.conf

или можно как вариант скопировать конфигурационный файл squid по умолчанию и его редактировать

#cp ./sarg.conf.default ./sarg.conf

у меня sarg.conf примерно имеет такое содержание

language Russian_koi8
access_log /usr/local/squid/logs/access.log
graphs yes
graph_days_bytes_bar_color orange
title "МОЯ ОГРАНИЗАЦИЯ"
font_face Tahoma,Verdana,Arial
header_color darkblue
header_bgcolor blanchedalmond
font_size 10px
header_font_size 10px
title_font_size 11px
background_color white
text_color #000000
text_bgcolor blanchedalmond
title_color green
logo_image none
logo_text_color #000000
background_image none
output_dir /usr/local/sarg/squid-reports
resolve_ip yes
#lastlog 0
index yes
overwrite_report no
#output_email erasha@domain.ru
max_elapsed 28800000
charset Koi8-r
show_successful_message yes
show_read_statistics yes
topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT 
USED_TIME MILISEC %TIME TOTAL AVERAGE
user_report_fields CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC 
%TIME TOTAL AVERAGE
#show_sarg_info yes
#show_sarg_logo yes

разберем опции.

language Russian_koi8

Указываем язык который будет использоваться в отчётах

access_log /usr/local/squid/logs/access.log

Указываем где будет находиться лог squid который sarg будет анализировать

graphs yes
graph_days_bytes_bar_color orange

Разрешаем формирование графиков

title "МОЯ ОГРАНИЗАЦИЯ"

Указываем загологок отчетов sarg

font_face Tahoma,Verdana,Arial
header_color darkblue
header_bgcolor blanchedalmond
font_size 10px
header_font_size 10px
title_font_size 11px
background_color white
text_color #000000
text_bgcolor blanchedalmond
title_color green
logo_image none
logo_text_color #000000
background_image none

Выше указываются размер,

output_dir /usr/local/sarg/squid-reports

Указываем где будут храниться отчёты

resolve_ip yes

разрешаем чтобы вместо ip компов sarg резолвил имена компов

#lastlog 0

параметр задает количество отчетов хранимых в каталоге, если он указан

index yes

создавать index-ный файл отчетов

overwrite_report no

Перезаписывать отчеты, здесь не перезаписываются а делаются еще один

#output_email erasha@domain.ru

можно при желании указать куда отправлять отчет, я это пока не использую

max_elapsed 28800000
charset Koi8-r

Кодировка надписей графика

show_successful_message yes

Показывать сообщение о удачном завершении анализа

show_read_statistics yes

Показывать статистику чтения

topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT 
USED_TIME MILISEC %TIME TOTAL AVERAGE
user_report_fields CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC 
%TIME TOTAL AVERAGE

Здесь указываются поля для статистики

#show_sarg_info yes
#show_sarg_logo yes

Показать инфо по sarg и его лого, я пока отключил.

Так с настройкой анализатора логоф squid закончили.

Настройка веб-сервера для просмотра отчетов

Ставим www сервер для удобного просмотра отчетов sarg. Я выбрал Apache 1.3

#cd /usr/ports/www/apache13
#make install clean

или так

cd /usr/ports/www/apache13 && make install clean

потом делаем символьный линк

# ln - s /usr/local/sarg/squid-reports /usr/local/www

Единственное, в каталоге /usr/local/sarg/squid-reports пока не было сделано ни одного отчета. Я, используя Squid, открыл одну любую страницу, чтобы был хоть какой-то лог, потом запустил Sarg, он, анализируя лог, создавал отчет вместе с каталогами, а потом делал символьный линк и запускал Apache. Можно, конечно, каталоги сделать руками вот так:

#mkdir /usr/local/sarg/squid-reports
#chmod 755 /usr/local/sarg/squid-reports

и надо создать пустой index.html для Apacha

#touch /usr/local/sarg/squid-reports/index.html
#chmod 644 /usr/local/sarg/squid-reports/index.html

Далее идем в /usr/local/etc/apache

открываем на редактирование httpd.conf, идем на 330 строку правим

ServerAdmin you@your.address

например на

ServerAdmin erasha@domain.ru

т.е. указываем адрес куда apache будет отправлять письма со своими проблемами =)

далее на 355 строке указываем где лежат наши отчеты

DocumentRoot "/usr/local/www/squid-reports"

Для запуска при загрузки системы добавляем в /etc/rc.conf

apache_enable="YES"

и запускаем

/usr/local/etc/rc.d/apache.sh start

Так теперь можно проверить работают squid и apache у нас

#sockstat

смотрим на предмет наличия строк

www   httpd  XXX  16  tcp4  *:80    *:*
squid squid  XXX  12  tcp4  *:3128  *:*

Первая показывает что запущен apache, вторая что squid работает.

я пользуюсь маленьким скприптиком для получения mac адреса компа вот с таким содержанием

#!/bin/sh
name=$1
ip=`ping -c1 $name | grep PING | awk '{print $3}' | sed 's/..$//' | sed 's/^(//'`
ot=`arp -an|grep "($ip)"|awk '{print $4}'`
echo $ot

я скриптик назвал mac.sh и пользую так

%mac.sh СетовоеИмяМашины_Или_IP
ХХ:ХХ:ХХ:ХХ:ХХ:ХХ   <-полученный МАС

если кто может предложить другой скрипт, поделитесь со мной, положу его в эту статью.

используя Cron собираю статистику с нарастающим итогом ежедневно и обнуляю итоги в начале каждого месяца

для этого добивил в /etc/crontab следующие строки

0       0       *       *       *       erasha  /usr/local/bin/sudo /usr/local/bin/sarg
15       0       1       *       *       root    /usr/local/sbin/squid -k rotate

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

0       0       *       *       *       root  /usr/local/bin/sarg

Ну вроде все. Выражаю благодарность s1lv3r за внесенные исправления и подсказки =). Также Grayich за указание на мои недочеты и ошибки. =).

Да, еще, natd поднимаю для того что бы из вне нельзя было поднимать соединения с внутренней сеткой. Пробуйте, тестируйте, критикуйте и пишите мне на мыло erasha@bsdportal.ru или стучитесь в аську 144897928.

Автор: erasha@bsdportal.ru


Настройка VPN-сервера FreeBSD с ведением статистики, шейпингом и фильтрацией

Обновлено: 01.07.2025

Для начала: данная статья не претендует на роль полноценного руководства или панацеи на все случаи жизни, посему все вопросы и пожелания по исправлению и дополнению статьи шлем на <shulik at ua.fm>.

Итак - приступим. В работе нам понадобится: FreeBSD 6.0-RELEASE (можно и другую :) ), mpd, freeradius, netams, mysql, поддержка в ядре или в виде модулей IPFW, IPDIVERT, PF, NETGRAPH. Рекомендуется включить поддержку этих компонентов в ядро. Поэтому открываем конфигурационный файл вашего ядра и добавляем, если не хватает, туда следующее:

options 	NETGRAPH	 # собственно поддержка netgraph
options 	NETGRAPH_PPP	 # поддержка PPP в netgraph
options 	NETGRAPH_PPTPGRE # поддержка gre-туннелирования

options 	IPFIREWALL			# включаем поддержку ipfw
options 	IPFIREWALL_DEFAULT_TO_ACCEPT	# политика по умолчанию - ACCEPT
options 	IPDIVERT		# включаем divert-сокеты (понадобится для статистики)

Что касается pf - то я оставил его в виде модуля. Если хотите включить в ядро - /sys/conf/NOTES вам поможет.

Теперь установим такие пакеты, как freeradius, mpd, mysql и netams. Коротко:

cd /usr/ports/net-mgmt/netams
make clean
make
make install
make clean

При сборке freeradius обязательно указываем поддержку mysql.

cd /usr/ports/databases/mysql50-server
make clean
make
make install
make clean
 
cd /usr/ports/net/freeradius
make clean
make
make install
make clean
 
cd /usr/ports/net/mpd
make clean
make
make install
make clean

Теперь необходимо отконфигурировать установленный софт. MySQL конфигурим по вкусу - задавая пароли рута и прослушку портов или ее отсутствие. Затем нужно настроить freeradius. Для начала идем в /usr/local/etc/raddb/ и переименовываем все файлики из ‘*.samples’ в ‘*’. Открываем radiusd.conf. В нем правим следующие настройки:

log_stripped_names=yes # Логируем атрибут User-Name если он найден в запросе
log_auth=yes # Логируем запросы аутентификации
log_auth_badpass=yes # Если пароль неверен - пишем его в Лог
log_auth_goodpass=no # верные пароли незачем писать в лог

Проверяем чтобы была раскоментарена строчка:

$INCLUDE ${confdir}/sql.conf

В секции authorize комментарим

files

и удаляем комментарий с

sql

В секции accounting также снимаем комментарий с

sql

Далее смотрим в sql.conf и правим:

driver="rlm_sql_mysql"
server="localhost"
login="login_k_mysql"
password="pass_k_mysql"

Осталось поправить clients.conf, задав для клиента 127.0.0.1 secret:

secret=MyOwnSecret

Кроме того нужно создать в mysql базу radius’a следующего содержания: таблица со словарями:

CREATE TABLE `dictionary` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `Type` varchar(30) DEFAULT NULL,
  `Attribute` varchar(64) DEFAULT NULL,
  `Value` varchar(64) DEFAULT NULL,
  `Format` varchar(20) DEFAULT NULL,
  `Vendor` varchar(32) DEFAULT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

таблица с клиентами самого радиуса (вместо нее пользуем файлы)

CREATE TABLE `nas` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `nasname` varchar(128) DEFAULT NULL,
  `shortname` varchar(32) DEFAULT NULL,
  `ipaddr` varchar(15) DEFAULT NULL,
  `type` varchar(30) DEFAULT NULL,
  `ports` int(5) DEFAULT NULL,
  `secret` varchar(60) DEFAULT NULL,
  `community` varchar(50) DEFAULT NULL,
  `snmp` varchar(10) DEFAULT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

таблица для клиентских сессий:

CREATE TABLE `radacct` (
  `RadAcctId` bigint(21) NOT NULL AUTO_INCREMENT,
  `AcctSessionId` varchar(32) NOT NULL DEFAULT '',
  `AcctUniqueId` varchar(32) NOT NULL DEFAULT '',
  `UserName` varchar(64) NOT NULL DEFAULT '',
  `Realm` varchar(64) DEFAULT '',
  `NASIPAddress` varchar(15) NOT NULL DEFAULT '',
  `NASPortId` int(12) DEFAULT NULL,
  `NASPortType` varchar(32) DEFAULT NULL,
  `AcctStartTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `AcctStopTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `AcctSessionTime` int(12) DEFAULT NULL,
  `AcctAuthentic` varchar(32) DEFAULT NULL,
  `ConnectInfo_start` varchar(32) DEFAULT NULL,
  `ConnectInfo_stop` varchar(32) DEFAULT NULL,
  `AcctInputOctets` int(12) DEFAULT NULL,
  `AcctOutputOctets` int(12) DEFAULT NULL,
  `CalledStationId` varchar(10) NOT NULL DEFAULT '',
  `CallingStationId` varchar(10) NOT NULL DEFAULT '',
  `AcctTerminateCause` varchar(32) NOT NULL DEFAULT '',
  `ServiceType` varchar(32) DEFAULT NULL,
  `FramedProtocol` varchar(32) DEFAULT NULL,
  `FramedIPAddress` varchar(15) NOT NULL DEFAULT '',
  `AcctStartDelay` int(12) DEFAULT NULL,
  `AcctStopDelay` int(12) DEFAULT NULL,
  PRIMARY KEY  (`RadAcctId`),
  KEY `UserName` (`UserName`),
  KEY `FramedIPAddress` (`FramedIPAddress`),
  KEY `AcctSessionId` (`AcctSessionId`),
  KEY `AcctUniqueId` (`AcctUniqueId`),
  KEY `AcctStartTime` (`AcctStartTime`),
  KEY `AcctStopTime` (`AcctStopTime`),
  KEY `NASIPAddress` (`NASIPAddress`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

таблица для проверяемых параметров:

CREATE TABLE `radcheck` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `UserName` varchar(64) NOT NULL DEFAULT '',
  `Attribute` varchar(32) NOT NULL DEFAULT '',
  `op` char(2) NOT NULL DEFAULT '',
  `Value` varchar(253) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id`),
  KEY `UserName` (`UserName`(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

таблица для проверяемых параметров групп:

CREATE TABLE `radgroupcheck` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `GroupName` varchar(64) NOT NULL DEFAULT '',
  `Attribute` varchar(32) NOT NULL DEFAULT '',
  `op` char(2) NOT NULL DEFAULT '',
  `Value` varchar(253) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id`),
  KEY `GroupName` (`GroupName`(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

таблица для возвращаемых параметров групп:

CREATE TABLE `radgroupreply` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `GroupName` varchar(64) NOT NULL DEFAULT '',
  `Attribute` varchar(32) NOT NULL DEFAULT '',
  `op` char(2) NOT NULL DEFAULT '',
  `Value` varchar(253) NOT NULL DEFAULT '',
  `prio` int(10) UNSIGNED NOT NULL DEFAULT '0',
  PRIMARY KEY  (`id`),
  KEY `GroupName` (`GroupName`(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

таблица для возвращаемых параметров:

CREATE TABLE `radreply` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `UserName` varchar(64) NOT NULL DEFAULT '',
  `Attribute` varchar(32) NOT NULL DEFAULT '',
  `op` char(2) NOT NULL DEFAULT '',
  `Value` varchar(253) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id`),
  KEY `UserName` (`UserName`(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

таблица соответствия пользователей и групп:

CREATE TABLE `usergroup` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `UserName` varchar(64) NOT NULL DEFAULT '',
  `GroupName` varchar(64) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id`),
  KEY `UserName` (`UserName`(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

И сразу же заведем тестового пользователя:

INSERT INTO `radcheck` VALUES (1,'user_test','Password','==','qwerty');
INSERT INTO `radreply` VALUES (1,'user_test','Framed-IP-Address',':=','192.168.1.3');
INSERT INTO `radreply` VALUES (1,'user_test','Framed-IP-Netmask',':=','255.255.255.255');
INSERT INTO `radreply` VALUES (1,'user_test','Framed-Protocol',':=','PPP');

По сути ААА готова к использованию. Добавляем в /etc/rc.conf строки:

radiusd_enable="YES"
mysql_enable="YES"

и стартуем скриптами из /usr/local/etc/rc.d/

Проверим радиус на работоспособность:

radtest user_test qwerty 127.0.0.1 0 MyOwnSecret

В результате должны получить что-то вида:

Sending Access-Request of id 189 to 127.0.0.1:1812
        User-Name = "user_test"
        User-Password = "qwerty"
        NAS-IP-Address = localhost
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=189, length=38
        Framed-IP-Address = 192.168.1.3
        Framed-IP-Netmask = 255.255.255.255
        Framed-Protocol = PPP

Это говорит о том, что радиус работает верно. Если нет - смотрим что он кричит в /var/log/radiusd.log

Пришло время настроить mpd. Смело идем в /usr/local/etc/mpd/ и убираем из имен конфигов samples. Открываем mpd.conf и пишем туда:

default:
	load pptp0

pptp0:
	new -i ng0 pptp0 pptp0
	load pptp_all

pptp_all:
	set ipcp ranges 192.168.1.1/32 10.0.0.0/24

	set iface disable on-demand
	set bundle disable multilink
	set link yes acfcomp protocomp
	set link no pap chap
	set link enable chap
	set link keep-alive 60 180

	set ipcp yes vjcomp
	set ipcp dns 192.168.1.1 # или любой другой доступный DNS
#    set bundle enable compression # обязательно проверяем, чтобы это было выключено.
#    иначе будем долго искать, почему пинги идут, но ничего не грузится

	set pptp enable incoming
	set pptp disable originate

# если нужно - задаем ip для открытия 1723 порта. по умолчанию - все
#    set pptp self 172.16.101.2 
	set radius timeout 10
	set radius config /usr/local/etc/mpd/radius.conf
	set radius retries 3
	set bundle enable radius-acct
	set bundle enable radius-auth
	set ipcp yes radius-ip

Нужно заметить, что для примера создан всего лишь один pptp линк. В реале их нужно создать столько, сколько вам необходимо одновременных pptp-туннелей. Создаем mpd.links:

pptp0:
	set link type pptp

И radius.conf:

acct 127.0.0.1 MyOwnSecret
auth 127.0.0.1 MyOwnSecret

Добавляем в rc.conf строку:

mpd_enable="YES"

и запускаем mpd.

Теперь нужно его проверить. Чтобы проще было вести отладку - добавим в /etc/syslog.conf:

!mpd
*.*		/var/log/mpd.log

И передергиваем syslog. Идем за клиентскую машинку и проверяем подключение по впн.

Если все прошло удачно - идем дальше, иначе ищем ошибку.

Далее нужно клиентов из внутренней сети с внутренними ip-адресами выпустить в инет. Для этого у нас есть несколько путей: воспользоваться связками ipfw+natd или ipfw+ng_nat, но мы пойдем по пути использования pf.

В /etc/rc.conf добавляем:

pf_enable="YES"
pf_rules="/etc/pf.rules"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""

Файлик pf.rules:

ext_ip="19х.1хх.хх.хх" # внешний ip-адрес сервера
int_if="rl1" # интерфейс смотрящий в локалку
int_net_vpn="xx.yy.zz.ff" # внутренняя VPN-сеть
local_net="..." # внутрення локалка
int_ip="..." # внутренний ип в локалке

nat on rl0 from $int_net_vpn to any -> $ext_ip # собсно NAT

pass quick on lo0 all # разрешаем все на lo0

pass quick from $ext_ip to any # Разрешаем траф
pass quick from any to $ext_ip # на внешнем ip

pass quick from $int_net_vpn to any # разрешаем любой траф
pass quick from any to $int_net_vpn # по впн-сети

# блокируем платные сервисы из локалки
block in quick on $int_if proto { tcp udp } from $local_net to $int_ip port { 25 110 143 3128 3306 } 
pass in quick on $int_if from $local_net to $int_ip

block in all # все осальное блокируем по умолчанию

Все. Теперь трафик должен ходить в инет. Осталось организовать логирование трафика через netams. Приведу лишь коротки отрывки конфигов - так как на сайте netams.com есть хорошая документация на русском языке с примерами настройки netams. В rc.conf привычно добавляем:

firewall_enable="YES"
firewall_script="/etc/ipfw.sh"

ipfw.sh:

#!/bin/sh
 
fwcmd="/sbin/ipfw"
 
${fwcmd} -f flush
${fwcmd} -f flush pipe
${fwcmd} -f flush queue
 
${fwcmd} pipe 1 config bw 512Kbit/s queue 50 # для обжимки трафа пользуемся pipe'ами
${fwcmd} pipe 2 config bw 512Kbit/s queue 50
 
${fwcmd} add pipe 1 ip from <vpn_net> to any in # вгоняем траф в пайпы
${fwcmd} add pipe 2 ip from any to <vpn_net> out
 
${fwcmd} add tee 100 ip from <vpn_net> to any in # копируем траф в divert-socket для netams.
${fwcmd} add tee 100 ip from any to <vpn_net> out

В netams для нас важны разделы:

service data-source 1
type ip-traffic
source tee 100

service storage 1
type mysql
user mysql_login # с правами создания БД, хотя бы на момент первого запуска
password mysql_pass
host localhost

service monitor 1
monitor to storage 1
monitor unit VPN

unit net name VPN ip <vpn-net> acct-policy ip

Теперь видимо все. Жду отзывы и пожелания на указанное выше мыло.

Copyright by Alexander Shulikov <shulik at ua.fm>


Хакеры: Приёмы взлома.

Обновлено: 01.07.2025

Согласно недавнему опросу, проведённому в США, обычные граждане боятся хакеров больше, чем обычных преступников. Интересно, что высокие технологии входят в нашу жизнь очень быстро и становятся её неотъемлемой частью. Каждый день наполнен множеством взломов, которые, как правило, не бывают зарегистрированы. Атакуют всех - от обычных пользователей до крупных правительственных организаций. Цели бывают разные, машины обычных пользователей, как правило, становятся «зомби», с которых проводятся атаки или рассылается спам, а у организаций похищается информация.


Введение в Основные моменты взлома и защиты сервера.

Обновлено: 01.07.2025

Человек, при любых обстоятельствах помни, что попытки (даже безуспешные) взлома чужих серверов - дело уголовно наказуемое. Даже если ты считаешь, что действуешь с благими намерениями (например, убедить кого-то, что ему следует обновиться). Все нижеизложенное приведено в целях ознакомления с тем, как могут действовать атакующие и от чего и как следует защищать инфраструктуру.


Источники бесперебойного питания. Общие понятия и термины

Обновлено: 01.07.2025

Система бесперебойного питания (СБП)
Автоматическое устройство, обеспечивающее нормальное питание нагрузки при полном обесточивании внешней электросети в результате аварии или недопустимо высоком отклонении параметров сетевого напряжения от номинальных значений (см. "Неполадки в сети"). Различают два основных типа СБП: источники бесперебойного питания и генераторные установки.


Удаление стандартных общих ресурсов C$, ADMIN$, IPC$

Обновлено: 07.04.2025

Большинсто людей, работающих в локальных сетях, даже не подозревают о том, что можно обратиться к их диску C: и посмотреть их личные документы. Большинство людей считают: раз я не ставил общий доступ к ресурсам на моем компьютере, то другие не смогут туда залезть. Как бы не так :). Достаточно вам ввести к командной строке ("Пуск -> Выполнить -> cmd")


Как создать голосование на PHP

Обновлено: 07.04.2025

Ниже приведена простая для понимания и реализации функция создания интернет-голосования на сайте.

Вызывается функция следующим образом:

 

<?php

// Создаем новую функцию С 3-мя параметрами:
// $name - название опроса;
// $variants - массив вариантов ответа;
// $dir - имя директории для файлов опроса (папка создается скриптом).

function voting($name, $variants, $dir){

GLOBAL $REQUEST_URI;

    // Если пользователь уже проголосовал
    if(isset($_POST['vote'])){

    // Массив ошибок
    $errors = array();

    // Массив содержимого директории

    $indir = array();
    $dh = opendir('./');
    while($file = readdir($dh)){
    if($file == '.' || $file == '..') continue;
    $indir[] = $file;
    }
    closedir($dh);

    // --------------------------------------------------------
    // Если у вас PHP5, вместо получения содержимого дериктории
    // вручную, вы можете воспльзоваться функцией scandir():
    // $indir = scandir('./');
    // --------------------------------------------------------


    // Если директория для файлов опроса отсутсвует,
    // Значит еще никто не голосовал, следовательно,
    // Нужно создать эту директорию и необходимые файлы,
    // Чтобы избежать ошибки


    if(in_array($dir, $indir) == FALSE){

    mkdir($dir, 0770);
    $cr1 = fopen($dir.'/base.txt', 'w');
    for($i=0; $i<sizeof($variants); $i++){
    fputs($cr1, '0');
    }
    fclose($cr1);
    $cr2 = fopen($dir.'/ip_list.txt', 'w');
    fclose($cr2);
    }

        // Понеслась... Проверяем, голосовал ли пользователь
        // Массив уже проголосовавших IP-адресов

        $ip_list = file($dir.'/ip_list.txt');


            // Если IP юзера совпал с одним из базы, значит юзер
            // Уже голосовал

            if(in_array($_SERVER['REMOTE_ADDR']." ", $ip_list) == TRUE){
            $errors[] = "Вы уже голосовали!";

        }else{

            $answers = file($dir."/base.txt");

            $fh = fopen($dir."/base.txt", "w");
            flock($fh, LOCK_EX);

            for($i=0; $i<sizeof($answers); $i++){
                // Удаляем переводы строк
                $answers[$i] = trim($answers[$i]);

                // Пишем
                if($i == $_POST['vote']){
                    fputs($fh, ($answers[$i]+1)." ");
                }else{
                    fputs($fh, $answers[$i]." ");
                }
            }

            flock($fh, LOCK_UN);
            fclose($fh);

        // Записываем IP юзера в базу проголосовавших

            $fb = fopen($dir."/ip_list.txt", "a+");
            fputs($fb, $_SERVER['REMOTE_ADDR']." ");
            fclose($fb);
            }

    if(isset($errors[0])){
        echo "Ваш голос не был учтен, т.к. были обнаружены следующие ошибки: <br>";
        for($i=0; $i<sizeof($errors); $i++) echo $errors[$i]."<br>";
    }else{

        echo "Ваш голос учтен! Результаты:<br>";

        // Обновляем базу
        $answers = file($dir."/base.txt");

        // Выводим результаты, и заодно считаем общее количество
        // Для этого складываем существующие голоса

        $summ = 0;
        for($i=0; $i<sizeof($answers); $i++){
        echo $variants[$i].": ".$answers[$i]."<br>";

        // Пересчет голосов
        $summ += $answers[$i];
        }

        // Вывод общего количества голосов
        echo "Всего: ".$summ;

    }

    }else{

        echo "<b>".$name."</b><br>";

        echo "<form action=./ method=POST>";

        for($i=0; $i<sizeof($variants); $i++){
            echo "<input type=radio name=vote value=".$i;
            if($i==0) echo " checked";
            echo ">".$variants[$i]."<br>";
        }
        echo "<input type=submit value=Голосовать>";
        echo "</form>";

    }
}
?>

Вызывается функция следующим образом:

 

<?php
voting("Выбираем самый популярный антивирус", Array("Kaspersky", "Eset NOD32", "Symantec", "DrWeb", "McAfee"), "vote2");
?>

Ну вот и все.

Автор: Mostom, http://cngroup.ru/