Linux глазами хакера - Михаил Флёнов
Шрифт:
Интервал:
Закладка:
$url = $b468_60 if grep $url =~ m%$_%, @b468_60;
# Проверка баннера 100x100
$url = $b100_100 if grep $url =~ m%$_%, @bl00_100;
# Проверка баннера произвольного размера
$url = $various if grep $url =~ m%$_%, @various;
# Всплывающее окно
$url = $closewindow if grep $url =~ m%$_%, @popup_window;
# Отдельный сайт, не внесенный в список в начале файла
$url = "$YOURSITE/empty.gif" if $url =~ m%hitbox.com/Hitbox?;
if ($LOG and $url ne $prev) {
my ($sec, $min, $hour, $mday, $mon, $year) = localtime;
printf LOG "%2d.%02d.%2d %2d:%02d:%04d: %srn",
$mday, $mon + 1, $year + 1900, $hour, $min, $sec,
"$who $prev > $url";
}
print "$url $who $ident $methodn";
}
close LOG if $LOG;
Сохраните эту программу в файле /usr/etc/redirector и установите для squid права на его исполнение. После этого добавьте в файл squid.conf следующую строку:
redirect_program /usr/local/etc/squid/redirector
Чтобы эта программа заработала, создайте на своем Web-сервере файлы со следующими именами:
□ 468_60.gif — картинка размером 468×60;
□ 100_100.gif — картинка размером 100×100;
□ empty.gif — картинка, которая будет заменять нестандартные баннеры. Лучше всего ее сделать размером 1×1 пиксель, чтобы она не испортила дизайн сайта;
□ close.htm — HTML-файл, который будет закрывать всплывающие окна. В нем нужно поместить всего лишь функцию, которая будет закрывать окно. Для этого используется JavaScript-функция window.close(). Пример содержимого файла показан в листинге 9.3.
Все эти файлы должны лежать на Web-сервере в одной директории. Не забудьте в сценарии (в переменной $YOURSITE) указать правильный путь к этому каталогу.
Я постарался снабдить код в листинге 9.2 комментариями. Если у вас есть опыт программирования на Perl, то дальнейшие действия вы выполните без проблем.
Листинг 9.3. Пример JavaScript-файла, закрывающего всплывающее окно<html>
<head>
<script language="JavaScript">
<!--
window.close();
//-->
</script>
</head>
<body>
</body>
</html>
9.5.7. Борьба с запрещенными сайтами
Недавно я разговаривал с одним своим знакомым, и мне понравилось его определение Интернета — сеть создана и живет порнографией. Я не уверен, но мне кажется, что он прав в том, что трафик с сайтов с интим-содержимым самый высокий (если не считать службу обновления Microsoft, где пользователи скачивают патчи для программ этой компании :)).
Ни один работодатель не обрадуется, если его сотрудники в рабочее время будут посещать сайты с запрещенным контентом (это не только бесполезная трата трафика, но и другие непроизводительные расходы). Родители тоже не хотят, чтобы их дети рассматривали подобные сайты, поэтому стремятся оградить их от этого зрелища. Это я говорю уже как отец двоих детей.
Порно-сайты легко можно запретить с помощью таких же методов, как мы использовали для баннеров. Например, можно отключить любые сайты, в адресе которых есть слово "sex". Но нельзя забывать, что могут быть исключения. К примеру, адрес может содержать текст "GasExpo". Обратите внимание, что выделенные буквы создают слово "sex". А ведь это реальный случай из жизни, когда пользователь сети не смог попасть на сайт выставки по газовому оборудованию.
Создавать списки запрещенных сайтов достаточно сложно, но можно. В настоящее время в зоне com большинство сайтов эротической направленности закрылись и обживают другие места, которые принадлежат маленьким государствам. Существуют домены, которые на 90% состоят из сайтов индустрии развлечений для взрослых. Вот их можно исключить полностью.
9.5.8. Ограничение канала
При организации доступа в Интернет очень часто требуется отдельным пользователям обеспечить большую скорость подключения. Как это сделать, когда по умолчанию все равноправны и могут работать на максимально доступной на данный момент скорости? Для этого нужно определиться с приоритетами. Для некоторых пользователей должен быть зарезервирован высокоскоростной канал связи. Нельзя повысить скорость одному человеку без ущерба остальным.
Если кому-то требуется полоса гарантированной пропускной способности для работы с приложениями, требующими высокой скорости обмена (например, для проведения презентаций), вы должны зарезервировать для них более мощный, чем для остальных канал.
Ограничение внешнего канала достаточно легко выполнить с помощью squid, Директивы, которые нужно использовать, можно увидеть в следующем примере:
delay_pools 3
delay_class 1 1
delay_class 2 2
delay_class 3 1
delay_parameters 1 256000/256000
delay_access 1 deny all
delay_access 1 allow admins
delay_parameters 2 256000/256000 4000/8000
delay_access 2 allow all
delay_access 2 deny admins
delay_parameters 3 64000/64000
delay_access 3 deny all
delay_access 3 allow bigboss
Этот код нужно добавить в файл конфигурации /etc/squid/squid.conf после комментария:
# DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option)
#-------------------------------------------------------------------
Большинство параметров уже заданы по умолчанию, и их следует заменить.
Давайте подробно рассмотрим конфигурацию. Для начала нужно определить, сколько у вас будет пулов (правил, описывающих скорость доступа). Для этого используется директива delay_pools n, где n — это количество пулов. По умолчанию n равно нулю, и нет никаких ограничений. Мы создадим три пула, поэтому в примере указано число 3.
После этого нужно определить, к какому классу относится пул. Это делается с помощью директивы delay_class n c, где n — это порядковый номер, а c — номер класса. Каждая строка с директивой delay_class должна иметь свой порядковый номер, который начинается с 1. В нашем примере две строки, поэтому в первой параметр n равен 1, а во второй — 2.
Номеров класса (второй параметр) может быть три:
□ 1 — ограничение канала происходит для всей сети. Например, у вас внешний канал 256 Кбит/с, вы можете его уменьшить для всех до 64 Кбит/с;
□ 2 — сузить можно общий канал и помимо этого для каждого пользователя индивидуально. В этом случае общий канал может быть понижен до 64 Кбит/с, и каждый пользователь в отдельности сможет работать только на скорости 4 Кбит/с;
□ 3 — ограничивать можно общий канал, индивидуально и для каждой сети в отдельности. Например, если скорость канала равна 256 Кбит/с, а в вашей сети работает 4 подсети, то каждой из них можно выделить по 64 Кбит/с, чтобы равномерно разделить нагрузку.
В нашем примере мы используем пулы 1 и 2 и снова 1 класса. Я специально расположил их не последовательно, чтобы пример был более наглядным.
Теперь описываем параметры скорости доступа. Это делается с помощью следующей директивы:
delay_parameters пул скорость_канала скорость_сети индивидуально
пул — это номер пула, скорость которого мы хотим описать. Так, в нашем примере следующая строка описывает скорость для первого пула:
delay_parameters 1 256000/256000
Так как пул 1 имеет 1 класс (delay_class 1 1), у которого можно ограничивать только канал полностью, в директиве используется единственный параметр — скорость_канала (256000/256000). Он формируется в виде двух чисел, разделенных знаком "/". До слэша указывается скорость, с которой будут скачиваться данные из сети, а после — размер пула, т.е. емкость, которую можно наполнить полученными из сети данными.
Количество параметров зависит от класса используемого пула. Если вы используете 1 класс, где можно ограничивать только общий канал, то должны быть указаны только два параметра:
delay_parameters пул скорость_канала
Если используется второй класс, то директива выглядит следующим образом:
delay_parameters пул скорость_канала индивидуально
Итак, первая директива использует полную скорость канала 256 000 байт в секунду. Обратите внимание, что скорость указывается именно в байтах, а характеристика модема задается в битах в секунду. Если в качестве скорости указать значение -1, то никаких ограничений не будет.
После определения параметров для первого пула нужно установить права доступа к нему. Это делается директивой delay_access, которая имеет следующий вид:
delay_access пул доступ acl
Первый параметр — это снова номер пула. Потом указывается доступ allow или deny, и последним идет имя списка.
В нашем примере для первого пула используется две строки:
delay_access 1 deny all
delay_access 1 allow admins
Сначала мы запрещаем доступ для всех, а потом разрешаем работать на данной скорости только ACL-списку admins. Подразумевается, что в этот список входят администраторы.