Безопасность компьютерной сети: Сканер в вопросах и ответах
Обновлено: 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.2025SSL/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Ниже приведена простая для понимания и реализации функция создания интернет-голосования на сайте.
Вызывается функция следующим образом:
// Создаем новую функцию С 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>";
}
}
?>
Вызывается функция следующим образом:
voting("Выбираем самый популярный антивирус", Array("Kaspersky", "Eset NOD32", "Symantec", "DrWeb", "McAfee"), "vote2");
?>
Ну вот и все.
Автор: Mostom, http://cngroup.ru/