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

Управление пользователями 3proxy

Обновлено: 15.01.2025

Как создать список пользователей

Список пользователей задается с помощью команды users.

users USERDESC ...

С помощью одной команды можно задать несколько пользователей, можно давать несколько команд users. USERDESC - описание пользователя. Описание пользователя состоит из трех полей разделенных : (двоеточием) - имени (login) типа пароля и пароля. Например:

users admin:CL:bigsecret test:CL:password test1:CL:password1 \
users "test2:CR:$1$lFDGlder$pLRb4cU2D7GAT58YQvY49." users test3:NT:BD7DFBF29A93F93C63CB84790DA00E63

В примере выше символ "\" означает, что перевода строки на самом деле нет.

Обратите внимание на двойные кавычки - они необходимы для второго пользователя, т.к. в его пароле встречается знак $, который для файла 3proxy.cfg означает включение другого файла. Поддеживается следующие типы паролей:

  • тип не указан - использовать системную авторизацию для данного пользователя (пока не реализовано).
  • CL - пароль в открытом тексте
  • CR - пароль в формате crypt() (только MD5)
  • NT - пароль в формате NT в шестнадцатеричной кодировке

NT и crypt пароли могут быть использованы для импорта учетных записей из Windows/Samba и Unix соответственно (для Windows можно использовать утилиты семейства pwdump). Учетные записи удобно хранить в отдельном файле (в таком случае можно хранить их построчно в формате, типичном для файлов паролей). Включить файл можно с помощью макроса $:

users $/etc/.3proxypasswd

или

users $"c:\Program Files\3proxy\passwords"

Шифрованные NT и crypt пароли можно создавать с помощью утилиты mycrypt.

Список пользователей един для всех служб. Разграничение доступа по службам необходимо производить с помощью списков доступа.

Как ограничить доступ пользователей к ресурсам

Для построения списков доступа используются команды allow, deny и flush. Команды имеют следующую структуру:

allow <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
deny <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
flush

Команда flush используется для сброса существующего списка доступа (это необходимо для того, чтобы можно было задать различные списки доступа для различных служб). allow служит для разрешения соединения, deny - для запрета соединения. Команда parent используется в качестве расширения команды allow для управления перенаправлениями соединений (о перенаправлении см. Как управлять перенаправлениями). В момент установки исходящего соединения просматривается список доступа и находится первая запись, соответствующая запрошенному клиентом соединению. Если запись соттветствует allow - соединение разрешается, deny - запрещается. Если список пуст, то соединение разрешается. Если список не пуст, но подходящей записи нет, то соединение запрещается. При этом:

  • <userlist> - список логинов пользователей через запятую
  • <sourcelist> - список сетей клиентов через запятую. Сеть задается в формате xxx.yyy.zzz.mmm/l, где l - длина маски сети (количество ненулевых байт). Например, 192.168.1.0/24 соответствует сети с маской 255.255.255.0.
  • <targetlist> - список сетей назначения через запятую
  • <targetportlist> - список портов назначения через запятую. можно задать диапазон портов через -, например, 80,1024-65535
  • <commandlist> - список команд, через запятую, для которых применяется правило:
    CONNECT - установить исходящее TCP соединение (например, SOCKSv4/5, POP3 proxy, и т.д.)
    BIND - разрешить входящее TCP соединение (SOCKSv5)
    UDPASSOC - создать UDP-ассоциацию (SOCKSv5)
    ICMPASSOC - создать ICMP-ассоциацию (не реализовано)
    HTTP_GET - HTTP GET запрос (HTTP proxy)
    HTTP_PUT - HTTP PUT запрос (HTTP proxy)
    HTTP_POST - HTTP POST запрос (HTTP proxy)
    HTTP_HEAD - HTTP HEAD запрос (HTTP proxy)
    HTTP_CONNECT - HTTP CONNECT запрос (HTTP proxy)
    HTTP_OTHER - другой HTTP запрос (HTTP proxy)
    HTTP - соответствует любому HTTP запросу кроме HTTP_CONNECT (HTTP proxy)
    HTTPS - тоже, что HTTP_CONNECT (HTTP proxy)
    FTP_GET - FTP get запрос
    FTP_PUT - FTP put запрос
    FTP_LIST - FTP list запрос
    FTP - соответствует любому FTP запросу
    ADMIN - доступ к интерфейсу администрирования
  • <weekdays> задает список дней недели, 1 соответствует понедельнику, 0 или 7 - воскресенье. 1-5 означает с понедельника по пятницу (включительно). 1,3,5 задает нечетные дни недели.
  • <timeperiodslist> список интервалов дня в формате ЧЧ:ММ:СС-ЧЧ:ММ:СС, например, 00:00:00-08:00:00,17:00:00-24:00:00 задает нерабочее время.

Примеры использования листов доступа можно найти в файле 3proxy.cfg.sample.

***
Источник: SECURITYVULNS.RU


Управление службами 3proxy

Обновлено: 15.01.2025

Как запустить конкретную службу (HTTP, SOCKS и т.д)

3proxy поставляется в двух вариантах: как набор отдельных модулей (proxy, socks, pop3p, tcppm, udppm) и как универсальный прокси-сервер (3proxy). Универсальный прокси сервер - это законченная программа, которой не требуются отдельные модули.
Отдельный модуль управляется только из командной строки. Поэтому для отдельного модуля не поддерживаются многие функции, такие как управление доступом и ротация журнала. Запуск модуля осуществляется из командной строки. Например,

$/sbin/socks -l/var/log/socks.log -i127.0.0.1

запускает SOCKS на порту 127.0.0.1:1080 с ведением журнала /var/log/socks.log.

Справку по опциям командной строки можно получить запустив модуль с ключом -?.

Если используется 3proxy, то запускаемые службы указываются в файле 3proxy.cfg. Файл 3proxy.cfg просматривается 3proxy построчно, каждая строка рассматривается как управляющая команда. Синтаксис команд описан в 3proxy.cfg.sample. Например,

log /var/log/3proxy.log D rotate 30 internal 127.0.0.1 external 192.168.1.1 proxy socks pop3p -l/var/log/pop3proxy

запускает 3 службы - PROXY, SOCKS и POP3 Proxy. Каждая слушает на интерфейсе 127.0.0.1 порт по-умолчанию (3128 для proxy, 1080 для socks и 110 для pop3p). Журналы всех служб кроме pop3p ведутся в файле /var/log/3proxy.log, который ежедневно меняется. Хранятся 30 последних файлов. Для pop3p ведется отдельный журнал /var/log/pop3proxy (см. Как настроить ведение журнала).

Как повесить службу на определенный интерфейс или порт

Опция -i позволяет указать внутренний интерфейс, -p - порт (пробелы в опциях не допускаются). Например, чтобы служба proxy висела на порту 8080 интерфейсов 192.168.1.1 и 192.168.2.1 необходимо дать команды

proxy -p8080 -i192.168.1.1 proxy -p8080 -i192.168.2.1

Ограничить доступ к службе 3proxy

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

Указание внешнего интерфейса (т.е. IP, с которого сервер будет устанавливать внешние соединения) так же является полезным. Для этого служит команда external и ключ -e соответственно. Для универсального прокси возможна дополнительная авторизация доступа с помощью имени/пароля, NetBIOS имени пользователя и по спискам доступа (по IP клиента, IP и порту назначения, см. Как ограничить доступ пользователей к ресурсам). Тип авторизации устанавливается командой auth в файле конфигурации.

auth none

Отсутствие какой-либо авторизации. Списки доступа не проверяются.

auth iponly

Будет идти проверка по списку доступа с использованием IP клиента, IP и номера порта назначения.

auth nbname

Перед проверкой по списком доступа будет произведена попытка получить NetBIOS имя клиента. Для этого используется NetBIOS код службы messager (0x03). Если имя определить не удалось (служба messager для Windows NT/2000/XP или WinPopUP для 95/98/ME не запущена), то имя будет считаться пустым. Далее следует проверка по спискам доступа. Данный тип авторизации не зависит от платформы сервера (т.е. прокси сервер, запущенный под Unix, сможет определять NetBIOS имена). Его рекомендуется использовать в однородных сетях, где у всех клиентов установлена Windows NT/2000/XP и пользователи не имеют доступа к привелегированным учетным записям. Этот вид авторизации не является надежным.

auth strong

Проверяется имя и пароль, переданные пользователем при подключении к прокси. Данный вид авторизации работает только с proxy и socks. Необходимо задание списка пользователей (см Как создать список пользователей). Соединения от неизвестных пользователей не принимаются. После проверки имени пользвоателя и пароля происходит проверка списков доступа.

Для разных служб можно установить различные типы авторизации, например,

auth none pop3p auth iponly proxy auth strong socks

не накладывает ограничений на использование POP3 Proxy, производит проверку по спискам доступа для пользователей HTTP Proxy и требует авторизации с именем и паролем для SOCKS.

С версии 0.6 возможно использвоать двойную авторизацию, например,

auth iponly strong allow * * 192.168.0.0/16 allow user1,user2 proxy

будет использовать авторизацию только в том случае, если не удалось пропустить пользователя с авторизаций iponly, т.е. для доступа к ресурсам 192.168.0.0/16 авторизация не требуется.

С версии 0.6 так же можно использвоать кэширование авторизации (имени пользователя) с целью повышения производительности. Использовать кэширование для strong практически не имеет смысла, она полезно для nbname и авторизации через внешние плагины, типа WindowsAuthentication. Кэширование настраивается командой authcache с двумя параметрами - типом кэширования и временем, на которое кэшируется пароль. Возможные типы: ip - после успешной авторизации в течение времени кэширования все запросы пришедшие с того же адреса считаются запросами от того же пользователя, name - после успешной авторизации от пользователя с тем же именем требуют указания имени, но реально аутентификации не производится, ip,name - запрос должен придти от того же IP и с тем же именем. user,password - имя и пароль пользователя сверяются с кэшированными. Возможны и другие сочетания. Для авторизации должен использоваться специальный метод авторизации - cache. Пример:

authcache ip 60 auth cache strong windows proxy -n

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

***
Источник: SECURITYVULNS.RU


Интеграция Sun VirtualBox с основной системой

Обновлено: 15.01.2025

Многим известна виртуальная машина Sun VirtualBox. За последние несколько месяцев про нее написано столько обзоров и статей, что ее пора бы включить в основной состав Windows! Но есть у VirtualBox функция, про которую знают не все - это интеграция дисплея виртуальной машины с хостовой (основной) машиной.

Выглядит это следующим образом: пусть у вас есть основная система Windows 7 с установленной программой VirtualBox. В VirtualBox у вас установлена виртуальная машина с Windows XP SP3. Вам бывает частенько необходимо запустить программу, установленную в виртуальной Windows XP SP3, но работать с отдельным окном виртуальной машины, переключаясь на остальные программы основной Windows 7 неудобно! Что делать? Сочетание клавиш "Хост + L" в запущенной виртуальной машине коренным образом исправит ситуацию.

Было:

VirtualBox без интеграции дисплея

Стало (VirtualBox работает в режиме интеграции дисплея):

VirtualBox в режиме интеграции дисплея

Почувствуйте разницу! Запустили рабочий компьютер, запустили (если не запускается автоматически) виртуальную машину - и вуаля, работайте с удобством! Ну а уж про преимущества виртуальных машин я промолчу - про это и так все знают. Удачи!

Автоматическая установка программ в домене Windows

Обновлено: 15.01.2025

Автор

Иванов Илья, http://bozza.ru, апрель 2010

Вступление

Если в домене Windows установлен WSUS, админ рад и спокоен - дескать, все, обновления ставятся на автомате, трафик снизился, бегать по компам не надо и пр. В принципе, все осталость то же самое, но ведь не все используют в работе Microsoft Outlook или Internet Explorer (хотя 8-ка очень неплоха). Есть много людей, привыкших работать с почтовиком The Bat!, броузером Opera или Mozilla. Если встает вопрос об обновлениях - либо это головняк админу в виде беготни к каждому компьютеру для обновления всем, скажем, Opera, либо юзеры должны сидеть под админами (пускай и локальными, не доменными).

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

Самый распространенный вариант ответа на вопрос - КАК? - Конечно, через Active Directory! - скажет вам любой специалист или просто сисадмин. А как через AD? - спросите вы. А вам скажут - ?! Вы не знаете, как через AD? Да там же просто, через policy! - но больше вам скорее сего ничего не скажут, потому что для большинства советчиков этот вопрос такой же неясный, как и для вас. И вам ничего не останется, как гуглить до потери пульса, потому что найти огромный фолиант на тему "как развернуть office 2007" в сети корпорации не проблема, а вот просто и в двух словах - редко что найдете. Не без гордости могу сказать, что данная статья как раз одна из немногих кратких и "без наворотов", попадавшихся мне.

Установка программ из MSI

Все изложенное далее относится к работе с инсталляционными пакетами типа MSI (расширение .msi). Файлы MSI есть (или их можно извлечь) для многих программ (Adobe Acrobat, The Bat, Opera, Firefox и пр.).

Предположим, мы хотим автоматически установить (а по мере выхода обновлений, устанавливать обновления) броузер Firefox. Файл msi для Firefox можно взять здесь (в новом окне).

Настройку шаблона .adm я пропущу, т.к. далеко не всегда это нужно, а еще чаще этот шаблон фиг найдешь. В итоге - дефолтные настройки (либо, если будем ставить поверх старой версии - настройки будут сохранены). Шаблон .adm нам не нужен.

Распределяем права доступа

Предполагаю, что все учетные записи компьютеров (кроме контроллеров домена) находятся в OU "OU Office Computers".

Примечание 1:

Почему лучше не использовать исходное размещение компьютеров (Computers - Компьютеры домена в оснастке Active Directory Users and Computers)? Мне удобнее в дальнейшем управлять политиками для групп компьютеров. К тому же, когда я посещал курсы Microsoft, я видел, что на контроллерах доменов в тестовых системах и в "боевых", настроенных специалистами Microsoft, используются практически только отдельно созданные OU, а не базовые. Я для себя решил повторять опыт специалистов. Пока мне от этого только удобнее. Естественно, ИМХО.

Примечание 2:

Не всем пользователям нужен Firefox (как не всем нужен The Bat, Opera и пр.). Поэтому создадим в "OU Office Computers" отдельную группу компьютеров, на которые будет установлен Firefox. Для ясности назовем группу GFirefoxComputers. Отмечу, что это будет именно группа, а не вложенное OU!

Расшариваем какую-либо папку на сервере (на рисунке это SoftwareDistibution, а не Mozilla Firefox, как может показаться) и даем группе GFirefoxComputers доступ на чтение, админу - полный доступ (не компьютеру админа, а пользователю - все-таки вы должны иметь возможность по сети заливать на шару файлы ;)).

Вообще, для проверки того, как все вообще работает, можно обойтись и без группы GFirefoxComputers. Просто для того, чтобы сразу не усложнять себе жизнь, и не пенять на групповые политики, если что пойдет не так ;)

Копируем Firefox MSI в расшаренную папку на сервере

Политика правит миром! 

На контроллере домена запускаем редактор групповой политики GPMC.MSC:

Редактор групповой политики GPMC

... и создаем связанную только с нашим OU "OU Office Computers" групповую политику под названием "Firefox 3.6.3 rus":

... редактируем нашу политику "Firefox 3.6.3 rus":

Готовим дистрибутив Firefox для развертывания в сети

В разделе "User Configuration" -> "Software settings" -> "Software Installation" щелкаем правой мышкой и создаем новый объект для установки - наш будущий инсталлятор Firefox.

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

Выбираем "Assigned" (Назначенный):

На этом работа с веткой "Software Installation" закончена.

Готовый пакет Firefox 3.6.3 для автоматической установки на компьютеры домена

Закрываем все открытые окна на сервере (если не помешает другим задачам, естественно), Пуск -> Выполнить -> gpupdate /force

Установка на рабочих станциях

Далее достаточно просто перезагрузить рабочие станции, чтобы автоматически установился Firefox ДО того, как появится окно для ввода логина/пароля. Иными словами, пользователь будет не в силах чего-то не установить, забыть и пр. Поэтому этот способ так хорош. Вы удаленно решаете, что будет установлено / обновлено на рабочих станциях.

Windows XP бывает не с первой перезагрузки "принимает" нове политики, поэтому можно подойти к юзеру, выполнить команду "gpupdate /force" (не обязательно под админом) и перезагрузить его компьютер.

Обязательно проверьте установку на своем / тестовом компьютере ДО того, как юзеры придут следующим утром, включат компьютеры... а вдруг косяк? Поэтому хотя бы первый раз сначала испытайте на себе.

Дополнительно

Теперь на любой новый компьютер, введенный в состав подразделения OU Office Computers будет установлена последняя версия броузера Firefox. Вам даже не придется ничего делать. Просто и очень полезно. Таким же образом можно устанавливать практически любой софт, включая Adobe Reader, Adobe Flash Player (которые в обычной ситуации требуют административных прав для установки), The Bat... да мало ли софта у вас в локальной сети, поддерживать который в актуальном состоянии одна из обязанностей системного администратора.

Нюанс: если вы уже установили какой-либо пакет, в нашем случае Firefox 3.6.3 rus, а через некоторое время вам потребуется его обновить (т.к. рано или поздно выйдет новая версия броузера), сначала удалите политику по установке Firefox 3.6.3, после чего создайте новую. Потом "gpudate /force" и вперед!


Авторизация Squid в домене Windows 2003

Обновлено: 15.01.2025

Введение

Многие небольшие организации используют домены Windows для управления учетными записями пользователей. Но далеко не все устанавливают у себя платные решения на ISA Server, Kerio WinRoute или др. Также можно сказать, что многие небольшие организации привлекают (за неимением своего) стороннего специалиста для настройки доступа в интернет с возможностью контроля доступа сотрудников (кто-что скачал и т.п.). В таких случаях часто имеет место настройка Squid на базе Linux / FreeBSD.

Удобство работы, простота и доступность Squid привлекает к себе многих, но как разрешить ходить в интернет только определенным сотрудникам, причем, желательно, поудобнее этим процессом управлять?

Вариант 1: настроить Squid на фильтрацию по IP-адресу. В небольшом офисе из 2-5 машин это может быть удобным, но если машин 20 и более? Все равно будет ротация машин (замена на новые, сотрудники могут меняться местами и пр.). При этом неизбежно для одного и того же человека IP-адрес будет меняться. Поэтому это хоть и простой вариант, но не самый удобный.

Вариант 2: уж коль мы вначале статьи решили, что наша сеть с контроллером домена Windows 2003, намного удобнее управлять доступом в интернет, управляя учетными записями пользователей из домена. Проблема в том, что Squid, хоть и поддерживает эту возможность, реализация ее не совсем очевидная, по крайней мере, вы уже должны были не раз и не два встретить на формах кучу вариантов, причем часто в обсуждении пишут о больших сложностях. Особенно, что касается внедрения авторизации через samba. Я сам, пролистав несколько таких руководств с кучей листингов и скриптов, отказался от мысли сразу ломиться в бой. Вместо этого я решил разделить задачу на два этапа, причем максимально проще и без скриптов по 50 строк каждый: 

1 этап: проверка работы авторизации squid в домене;

2 этап: внедрение этого способа в рабочий squid.

Проверка авторизации Squid в домене Windows 2003

Для начала проверим, как вообще работает авторизация Squid в домене Windows. Нам будет нужен файл "squid_ldap_auth". В зависимости от операционной системы прокси-сервера, этот файл может быть в разных местах, у меня в CentOS он находиться по адресу:

/usr/lib/squid/squid_ldap_auth

 Теперь создадим отдельное организационное подразделение в домене Windows 2003:

В русском варианте примерно тоже самое, только вместо "Organization Unit" будет "Подразделение".

Создадим в этом подразделении двух пользователей: SquidWebAccess (пароль "squid") и testuser (пароль "12345"). Права для этих пользователей - минимальные.

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

Пользователь testuser - это имитация реального пользователя.

На этом этапе возникнет вопрос - а с чего это в уже настроенной структуре пользователей домена с отработанными политиками безопасности и пр. делать отдельного пользователя в новом OU, а не использовать текущие учетные данные? Ответ: можно использовать и те учетные записи, которые уже настроены. Но при этом теряется малая часть гибкости: если надо будет запретить пользователю доступ к интернет (за провинность, например), в моем случае не придется отключать его основную учетную запись домена. Я просто отключу учетную запись для доступа в интернет. Можно спорить, что удобнее, что нет. Мне удобнее разделить доступ в интернет от доступа к файлам и пр.

Заходим на прокси-сервер (где Squid) и вводим команду (в одну строку, у меня разделены символом \):

/usr/lib/squid/squid_ldap_auth -v 3 -R -D SquidWebAccess@domain.local -w squid \
-b "ou=InternetUsers,dc=domain,dc=local" -f "sAMAccountName=%s" 192.168.1.2

где

считаем, что домен называется "domain.local"

-D SquidWebAccess@domain.local - полное имя пользователя для возможности Squid сравнить введенные данные пользователя с теми, которые мы задали пользователю testuser

-w squid - пароль пользователя SquidWebAccess

-b "ou=InternetUsers,dc=domain,dc=local" - полный путь до места хранения учетных записей пользователей для доступа в интернет. Заметьте, что использовать свои учетные записи (в т.ч. учетную запись администратора домена) для доступа в интернет не выйдет! Можете это считать дополнительной опцией безопасности.

192.168.1.2 - ip-адрес контроллера домена Windows 2003.

После выполнения команды вводим:

testuser 12345

В ответ должны получить OK. Если нет, то ищем, описать все возможные варианты проблем - задача нереальная.

Если все OK, то переходим ко второму этапу: внедряем авторизацию squid в домене уже в самом прокси-сервере Squid, а не в тестовом варианте.

Авторизация Squid в домене Windows 2003

Для настройки авторизации в Squid, нам нужно изменить только squid.conf.

# LDAP-авторизация
# В одну строку, или разделяйте символом \

auth_param basic program /usr/lib/squid/squid_ldap_auth -v 3 -R -D SquidWebAccess@domain.local -w squid \
  -b "ou=InternetUsers,dc=domain,dc=local" -f "sAMAccountName=%s" 192.168.1.2

auth_param basic children 5
auth_param basic realm Web-Proxy
auth_param basic credentialsttl 1 minute

acl ldap-auth proxy_auth REQUIRED

http_access allow ldap-auth
http_access allow localhost

http_access deny all  

Остальные настройки Squid трогать не надо. Перезапустите Squid:

/sbin/service squid restart
Stopping squid: ........[ OK ]
Starting squid: ........[ OK ]

 Наслаждайтесь :) Про подсчет трафика с учетом такой авторизации напишу позже.


Скорость перебора паролей на CPU и GPU

Обновлено: 15.01.2025
(с) Иван Голубев, http://www.golubev.com
29 мая 2009 г.
«косметическая» правка 14 августа 2009 г.

Вычисления на GPU в последнее время стали очень популярными во всех областях, где есть возможность их использовать. Одним из таких направлений является криптография, более узко – подбор / перебор паролей. К сожалению, реальные результаты работы (как обычно это и бывает) приукрашаются в маркетинговых целях, так что становится не очень ясно, какой на самом деле выигрыш от использования GPU в этой области.

Длинные объяснения заканчиваются краткими выводами (которые, вероятно, и стОит прочитать при первом ознакомлении с этой статьёй).

На что тратится время при переборе паролей.

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

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

Для хэширования ещё совсем недавно массово использовался MD5, но (после обнаружения уязвимостей в алгоритме) его довольно быстро заменил SHA1. С SHA1 в данный момент уже тоже не совсем всё гладко (сложность нахождения коллизии составляет примерно 2^63, а недавно ещё и заявили о снижении этого числа до 2^52), но при использовании его в каком-нибудь «обрамлении» вроде PBKDF2 сложность (а, точнее, легкость) нахождения коллизии уже не так важна.

Один очень важный момент: при проверке паролей определяющей чаще всего является именно скорость хэширования, а не скорость шифрования. Практически везде сейчас используется так называемое «key strengthening», то есть усиление ключа путём добавления сложности на этапе генерации пароль -> ключ. Вместо одного преобразования SHA1 можно выполнить 10000, подавая результат первой итерации как вход на вторую и т.д. Для валидных паролей, которые собственно проверяются один раз, разница незаметна – генерится ключ 0.01 мс или 10 мс совсем не важно. А вот для задачи перебора паролей, когда проверяются миллиарды комбинаций, это уже очень ощутимо. Если, например, какой-то пароль можно подобрать за месяц, то он явно не стойкий. Однако, если использовать схему «усиления ключа» с дополнительными 10000 итераций, то на подбор того же самого пароля уйдёт уже не месяц, а 830 лет, что переводит пароль в разряд довольно устойчивых.

Алгоритм PBKDF2, описанный в RFC 2898, сейчас является одним из самых популярных для «key strengthening» и используется во многих приложениях. Рекомендуемый минимум итераций в нём составляет 1000 (а одна итерация требует выполнения двух SHA1_Transform действий, о которых ниже).

В некоторых случаях для проверки валидности пароля вообще не надо расшифровывать файл. Например, появившееся в WinZip 9 сильное шифрование на основе AES 128 & 256 bit на самом деле до AES доходит только в случае абсолютной правильности проверяемого пароля. Во всех остальных случаях выполняется только PBKDF2, который в свою очередь использует только SHA1. В RAR 3.x до AES доходим после 262144 итераций SHA1. Так что на фоне такого количества SHA1 инициализация и расшифровка нескольких байт с помощью AES занимает мизерные доли процентов от общих вычислений. В MS Office 2007 используется 50 000 итераций SHA1, в WPA, как и в WinZip, PBKDF2, но уже с количеством итераций 4096.

В PDF9 Adobe сильно промахнулся с новым алгоритмом, взяв одну итерацию SHA256 вместо 50-ти MD5 + 20x RC4, что ускорило скорость перебора паролей по сравнению с предыдущей версией практически на два порядка. Но валидация пароля после хэширования не требует никакого шифрования, так что и тут важна только скорость SHA256.

Правильный алгоритм шифрования делает невозможным сокращение пространства перебора для ключей. То есть, чтобы найти, например, 128-ми битный ключ надо перебрать 2^128 == 3.4 * 10^38 вариантов. Если допустить, что один компьютер перебирает один миллиард вариантов в секунду, у нас есть миллиард компьютеров и мы располагаем миллиардом лет, то за это время мы сможем проверить всего лишь 10^9 * 10^9 * 10^9 * 60 с * 60 м * 24 ч * 365.25 д ~= 3.16 * 10^34 вариантов, меньше 1/10000 требуемого диапазона.

Пример неудачного алгоритма шифрования: в классическом zip используются 96-ти битные ключи. Несмотря на прошедшие уже 20 лет с момента создания алгоритма, эти ключи до сих пор невозможно перебрать «в лоб». Однако, имея часть незашифрованного файла, можно провести так называемую plaintext attack, при этом сложность перебора упадёт с 2^96 всего до 2^38, что составляет всего пару часов работы для современного компьютера.

Все «сильные» алгоритмы шифрования (AES, Blowfish, etc) не позволяют провести plaintext атаку и не позволяют сократить пространство перебора. Так что единственная возможность получить доступ к зашифрованным файлам – знать правильный пароль.

Вывод: используемый алгоритм шифрования практически никак не влияет на скорость перебора паролей. Хороший алгоритм просто обеспечивает невозможность подбора ключа «в лоб». А вот уже для перебора паролей главным является именно преобразование пароля в ключ, а за это отвечают алгоритмы хэширования (MD5, SHA1), а не алгоритмы шифрования (AES, Blowfish).

Значение «количество итераций» мало что говорит.

MD5, SHA1 (и его потомки в виде SHA256, 384, 512) очень похожи. На входе есть состояние хэша (128 бит для MD5, 160 бит на SHA1) и блок данных размером в 512 бит (64 байт). На выходе, после операции хэширования, получаем новое состояние хэша. Это сердце алгоритма, функция обычно называется MD5_Transform, SHA1_Transform, etc.

Важно заметить, что размер блока является константой, всегда хэшируются именно 64 байта. Если подать на вход 1 байт, то он будет дополнен до 64 путём добавления нулей, символа-терминатора и 8-ми байтового значения длины блока. То есть, подать отдельно на вход хэш-функции 64 раза по 1 байту или один раз 64 байта – абсолютно одинаково в плане скорости обработки (не считая того, что при подаче 64 байт придётся символ-терминатор и значение длины обрабатывать уже в следущем блоке).

Для некоторых алгоритмов пишется количество итераций как количество вызовов функции по обновлению хэша. Но не всякое обновление ведёт к вызову Transform функции. Данные накапливаются в буфере и отдаются на Transform блоками по 64 байта. Например для RAR 3.x количество итераций равно 262144, но количество обрабатываемых блоков будет равно ((длина_пароля * 2 + 8 + 3) * 262144) / 64. Что, например, для паролей длиной в 4 символа составит 77824 (+ещё 17 дополнительных блоков для создания IV для AES).

Для алгоритма PBKDF2 требуется на каждую итерацию обработать 2 блока плюс ещё 2 для инициализации. Иными словами, для проверки одного пароля WinZip/AES (где количество итераций равно 1000) надо выполнить 2002 операции SHA1_Transform.

В Office 2007 используется 50 000 итераций и обрабатывается блок в 20 байт. Но подаются эти байты каждый раз отдельно, поэтому выходит именно 50 000 вызовов SHA1_Transform, а не 50000*20/64 = 15 625.

Что даёт приведение количества итераций к количеству блоков для Transform? Так как время вычисления хэша не зависит от данных в блоке и является константой, зная время хэширования одного блока и количество блоков, можно легко посчитать общее время хэширования. Также легко оценить, насколько быстрее или медленнее разные алгоритмы генерации паролей относительно друг друга.

Например, на основе рассчётов выше выходит, что скорость перебора паролей WinZip/AES в ~39 раз быстрее, чем 4-х символьных паролей в RAR 3.x. А скорость перебора паролей для Office 2007 в 25 раз ниже, чем для WinZip/AES. Точность этих вычислений, конечно, приблизительная. Для сложных алгоритмов инициализации блока данных (как в RAR 3.x) такая оценка может давать заметную ошибку. Но в большинстве случаев достаточно знать только порядок величины, а не абсолютное значение.

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

Насколько быстро можно хэшировать?

Теперь нас интересует вопрос, насколько же быстро можно обработать один 64-х байтный блок данных. Операции, используещиеся в Transform функции, самые простейшие – логические OR, XOR, NOT, AND, арифметическое сложение, сдвиги. Все действия производятся над 32-х битными целыми. Один блок данных легко помещается в кэш L1 любого из современных процессоров, так что скорость работы с памятью, её размер, размер L2 или RPM дискового накопителя не играет никакой роли. Иными словами, скорость перебора находится в прямой зависимости от скорости целочисленного ALU и практически никак не зависит от всего остального. У какого же из современных процессоров с этим лучше всего?

Процессоры.

Так как хэширование разных паролей никак не зависит друг от друга, то очень выгодно использовать какой-нибудь SIMD набор инструкций для их параллельной обработки. Лучше всего подходит SSE2 (хотя и от «старого» MMX до сих пор есть польза), позволяющий выполнять какую-либо операцию сразу с четырьмя 32-х битными операндами. В своем первом воплощении в Pentium 4 со скоростью работы SSE2 инструкций было не всё гладко (например, пересылки регистр->регистр стоили 6 тактов, а выполнение OR всего 2), но уже тогда выигрыш от их применения был вполне ощутимым. В данный же момент реализация SSE2 в Intel Core архитектуре просто великолепна: можно выполнить 3 операции за такт, причём результат будет готов уже на следующем такте (latency == 1 такт). То есть, пиковая производительность у Core составляет 12 операций с 32-х битными целыми за такт. Хотя не все операции можно выполнять на этой пиковой скорости.

Несмотря на появление новых ревизий ядра, перехода с 65nm на 45nm и, наконец, выхода Core i7, никаких заметных изменений в целочисленном ALU не произошло. Поэтому Core i7 работает практически также, как и его 65nm предок Core 2. Производительность зависит только от частоты, поэтому, например, Q6600 разогнанный до 3-х Ггц (что является вполне обычной практикой) будет ровно на 3/2.66 = 12.7% быстрее, чем Core i7 920 на штатной частоте (не считая turbo burst). Стоимость же Core i7, включая материнскую плату и память DDR3 заметно выше, чем у «старых» систем на Core 2 65/45nm.

Ситуация с AMD несколько хуже. Даже сейчас существует ещё довольно много систем с процессором Athlon XP. В своё время он очень хорошо конкурировал с P4, но вот SSE2 в нём нет. В архитектуре K8 AMD сделала поддержку SSE2, но в самом примитивном виде: 128-ми битные инструкции разбивались на две половинки и запускались на 64-х битном ALU. Что приводило к тому, что разницы между MMX кодом и SSE2 практически не было.

С появлением K10 (или Phenom) AMD наконец сделала поддержку SSE2 более достойным образом, однако Core 2 она заметно уступает. K10 может выполнить до 2-х операций с 4-мя 32-х битными целыми за такт, а результат операции будет готов только через такт (latency == 2 такта). То есть, пиковая производительность составляет 8 операций с 32-х битными целыми за такт. Что это означает в плане сравнения K10 vs Core 2: процессор от AMD будет в среднем в 1.5 раза медленнее, если мы сможем выстроить инструкции таким образом, чтобы latency не была лимитирующим фактором. В некоторых алгоритмах, учитывая ограниченное количество XMM регистров, сделать это очень непросто, а то и невозможно.

С другой стороны, не все операции Core 2 может выполнять на уровне «три за такт». Сложений можно выполнить только два, а сдвигов вообще один. K10 же умеет сдвигать два XMM регистра за такт, но уже с latency в 3 такта. Поэтому реальное соотношение производительности Core 2 vs K10 плавает где-то в районе 1.25-2x. K10 всегда медленней на задачах, которые зависят только от скорости SSE2 ALU, но может быть быстрее на алгоритмах со множеством чтений из памяти и отсутствием логических операций.

Phenom II, появившийся не так давно, отличается от просто Phenom'а гораздо меньше, чем Core i7 от Core 2 45nm. Но стоит, конечно, дороже.

Важно заметить, что в данный момент использование SSE2 является обязательным при параллельной обработке данных. Логическая операция над 32-х битным регистром или над 128-ми битным xmm регистром, содержащим четыре 32-х битных значения, выполняется за абсолютно одинаковое время. Считать на Core 2 без SSE2 это всё равно что взять GPU и отключить на нём ¾ всех потоковых процессоров.

Также, задача перебора паролей идеально распараллеливается, так как нет никакой зависимости между данными. Поэтому производительность растёт линейно в зависимости от частоты и количества ядер. Нет никакого смысла использовать «быстрый» двухядерник, если есть возможность задействовать «медленный» четырёхядерник. Иными словами, Q6600 на частоте 2.4Ггц будет работать как 4*2.4 = 9.6Ггц, а E8600 3.33 Ггц только как 3.33 * 2 = 6.66Ггц. Разница в скорости в 1.5 раза, а разница в цене примерное такая же, но в другую сторону.

Вывод: Лучшим процессором для перебора паролей в данный момент является Intel Core Quad. По соотношению цена / производительность выгоднее модели Core 2 65/45nm. Стоимость систем на Core i7 выше, а частота ничуть не лучше, чем у «старых» Core 2. Процессоры от AMD заметно отстают на SSE2 целочисленных вычислениях и при этом разница в цене между Core 2 и Phenom ничуть не компенсирует этого отставания. SSE2 обязательно к употреблению, иначе возможности современных процессоров просто не раскрыть.

Так всё-таки насколько быстро можно хэшировать?

Подробные рассчёты затрагивают слишком много деталей и требуют отдельной статьи, поэтому рассмотрим кратко только MD5. MD5_Transform состоит из 64 итераций. В каждой итерации используются похожие операции. Подробное описание можно найти, например тут – http://en.wikipedia.org/wiki/MD5.

Очень грубо скорость по количеству используемых операций можно оценить так:

 

Intel Core

F

G

H

I

Логические (L)

4

4

3

4

Сложение (A)

4

4

4

4 + CMP

Сдвиги (S)

2

2

2

2

Пересылки (M)

2

2

2

1

Возможное группирование инструкций

SAL

SAL

AML

AML

SAL

SAL

AML

AML

SAL

SAL

AML

AM.

SAL

SAL

AML

ACL

256 / 4 = 64

тактов на один блок

4 * 16

4 * 16

4 * 16

4 * 16

 

Ради сравнения – то же самое для AMD K10:

 

AMD K10

F

G

H

I

Логические (L)

4

4

3

4

Сложение (A)

4

4

4

4 + CMP

Сдвиги (S)

2

2

2

2

Пересылки (M)

2

2

2

1

Возможное группирование инструкций

SA

SA

AM

AM

LL

LL

SA

SA

AM

AM

LL

LL

SA

SA

AM

AM

LL

L.

SA

SA

AM

AL

CL

LL

376 / 4 = 94

тактов на один блок

6 * 16

6 * 16

5.5 * 16

6 * 16

 

Конечно такая оценка не учитывает много разных факторов, однако подходит чтобы быстро понять, насколько быстро теоретически можно выполнять MD5_Transform. Опытные же результаты, как обычно, выглядят похуже. Но не так уж сильно:

MD5_Transform 72 такта в 64-х битном режиме.

MD5_Transform 90 тактов в 32-х битном режиме.

MD5_Transform в простейшей реализации на SSE2 при обработке всего 4-х блоков за раз 128 тактов.

SHA1_Transform 175 тактов в 32-х битном режиме, 162 такта в 64-х битном.

С SHA256 точного значения нет (так как используется SHA256 значительно реже), но SHA256_Transform займёт как минимум 425 тактов. Присутствие значительного бОльшего количества сдвигов и сложений скорее всего увеличит это значение.

Использование 64-х битного режима позволяет задействовать в два раза больше XMM регистров, что, в свою очередь, помогает решить проблемы с latency. Особенно сильно это влияет на MD5, где операций очень мало, так что постоянно приходится ждать результаты предыдущих вычислений, если обрабатывать всего 4 блока данных за раз.

Теоретические и практические результаты.

Ну и наконец сводная таблица, ради которой всё и затевалось. Сравнение скоростей для различных видов паролей. Были использованы:

Скорость замерялась на одном ядре Intel Core 2 Q6600 @ 2.4Ггц, ATI HD4850 на штатной частоте 625Мгц, nVidia GTX 260 /w 192SP тоже на штатной частоте 1.242Ггц.

 

Алгоритм

Количество блоков

Требуется тактов

Теоретическая скорость

Практическая скорость

ATI HD4850

x

GTX 260

x

RAR 3.x

passlen = 4

(4 * 2 + 11) * 4096 + 17 = 77841 x SHA1

13 622 175

176

160(ARCHPR)

168 (crark)

3120

19.5

2080

12.4

RAR 3.x

passlen = 6

(6 * 2 + 11) * 4096 + 17 = 94225 x SHA1

16 489 375

145

134 (ARCHPR)

2625

19.5

1695

12.6

WinZip AES

(1000 + 1) * 2 = 2002 x SHA1

350350

6850

6700

135K

20.1

-

-

WPA

(4096 + 1) * 2 * 2 = 16388 x SHA1

2867900

836

820

14К

17

9800

12

MS Office 2007

50005 x SHA1

8750875

274

94

-

-

3300

37.5

PDF9

1 x SHA256

-

-

5.09M

-

-

74.4M

14.6

MD5 single hash

1 x MD5 * (45/64)

51

47M

44.5M

891M

20

563M

12.7

 

Как видно, соотношение скоростей на GPU к скорости на CPU довольно однообразное. ATI HD4850 примерно в 20 раз быстрее одного ядра Q6600 на частоте 2.4Ггц, GTX 260 примерно в 12 раз. Значение 37.5 для Office 2007 появилось только из-за неоптимизированного CPU кода (забавно что для Office 2007 используется SSE2, но настолько неудачно, что лучше бы вообще не использовался). Скорость перебора на GPU зависит только от частоты работы ALU (всё как с CPU), скорость памяти и объём ничего не значат. Зная разницу в частоте и количество SP можно довольно точно оценить производительность разных GPU одного семейства.

Сравнивать напрямую по цене CPU и GPU довольно глупо – видеокарта не может работать самостоятельно, да и CPU тоже. Системы с двумя и более процессорами сразу уводят нас на другой уровень цен, в то время как нет никакого экономического смысла рассматривать эти (серверные) процессоры с большим L2 кэшем для задач перебора паролей. С GPU же ограничивающим фактором является количество PCI-E разъёмов на материнской плате. На самых простейших платах он всего один, на большинстве – два. Материнские платы с 4-мя разъёмами уже довольно редки. Причём нужно не только 4 разъёма, но ещё и место под сами карты – занимают-то они обычно 2 слота. 4 раза по 2 слота встречается, судя по всему, только у MSI K9A2 Platinum. Есть 6-ти слотовый P6T6 WS Revolution, но там могут поместиться только «одинарные» карты.

Похоже, собрать систему с 4-мя ATI HD4870x2 невозможно в принципе (неплохое описание всех возникающих проблем тут: http://forums.guru3d.com/showthread.php?p=2862271). Системы с 4-мя двойными nVidia картами существуют (например http://fastra.ua.ac.be/en/specs.html), но проблем и там хватает. Начиная с мощного блока питания и корпуса, куда можно всё нормально поместить и заканчивая установкой драйверов.

В итоге получается такой список с точкой отсчёта производительности на 4-х ядрах Q6600 на частоте 2.4Ггц:

 

Название

Частота, кол-во ядер

Соотношение

Цена CPU или GPU

Общая цена системы

E2160

1.8 x 2

0.38x

?

<$300

Q6600

2.4 x 4

1x

$220

~$600

nVidia 8600 GT

1.188 x 32

0.5x

?

~$650

nVidia 9800 GT

1.242 x 112

1.75x

$120

~$720

ATI HD4770

0.75 x 640

5x

$100

~$700

ATI HD4850

0.625 x 800

5x

$120

~$720

nVidia GTX295

1.242 x 240 x 2

7.5x

$500

~$1200

ATI HD4870x2

0.75 x 800 x 2

12x

$400

~$1100

4x ATI HD4770

0.75 x 640 x 4

20x

$400

~$1200

2x ATI HD4870x2

0.75 x 800 x 2 x 2

24x

$800

~$1600

4x nVidia GTX295

1.242 x 240 x 2 x 4

30x

$2000

>$3000

TACC1441 FPGA

?

2.4x

$4000

~$4500

 

Для систем с медленными GPU (вроде 8600 GT) имеет смысл считать производительность как CPU+GPU (что тут сделано не было). Для быстрых же GPU процессор будет загружен дополнительными рассчётами и синхронизацией задач, так что считать дополнительно на нём просто не имеет смысла. В некоторых случаях четырёхядерного процессора может и не хватить для систем с 8-ю GPU.

Как видно, самым интересным решением в плане цена/производительность является связка из 4-х HD4770. Однако, опять же, требуется материнская плата, где можно разместить 4 такие карты – несмотря на то, что HD4770 одночиповая карта, система охлаждения занимает дополнительный слот.

TACC1441 приведён для примера в качестве «железного» решения. Это плата на основе FPGA, поддерживается ПО от AccessData (http://www.forensic-computers.com/TACC1441.php). Как видно, никакой конкуренции современным GPU он составить не может.

Осталась одна «маленькая» проблема – практическое полное отсутствие ПО для карт ATI. Карты от nVidia поддерживаются в ElcomSoft's Distributed Password Recovery, а вот с ATI пока всё совсем плохо.

Вывод: прирост в производительности от использования одного GPU примерно 4х-5ти кратный по сравнению с современной четырёхядерной системой. Карты от ATI заметно быстрее при той же цене, однако для них практически нет ПО. При росте количества GPU в системе нелинейно растут проблемы – появляется потребность в мощном блоке питания, специальном корпусе, эффективной системе охлаждения и т.д.

А почему такой маленький прирост?!

TACC1441 обещает 60-ти кратный прирост. EDPR декларирует 100x и 200x. Почему же тут получилось «только» 30? Ответ прост: маркетологи и пиарщики тоже работают. Сравнивая неоптимизированный CPU код на системе начального уровня с top решением на 4xGTX295 можно получить совершенно потрясающий результат. Например такой: E2160 1.8Ггц vs 4xGTX295 для документа MS Office 2007 в EDPR == прирост в 229 раз!

Вывод: всегда полезно думать самому.

Какие пароли можно считать стойкими?

 

Алгоритм

Длина

Набор символов

Количество вариантов

Время перебора на «обычной системе» Q6600 + HD4770

Время перебора на системе 4xGTX295

Время перебора на суперкластере 100x 4xGTX295

RAR 3.x

4

Латинские маленькие + большие + цифры + спецсимволы

96^4 = 84934656

7.6 часов

1.5 часа

45 сек

RAR 3.x

6

Латинские маленькие + большие + цифры + спецсимволы

96^6 = 782757789696

8 лет

1.33 лет

5 дней

WPA

8

Латинские маленькие + большие + цифры

62^8 = 218340105584896

495 лет

82 лет

300 дней

WinZip 9+

8

Латинские маленькие + большие + цифры

62^8 = 218340105584896

51 год

8.5 лет

31 год

 

Вывод: неутешительный для brute-force атаки. При правильно выбранном пароле из 8-ми символов подобрать его в осмысленное время просто невозможно.

Настройка 3proxy: пример

Обновлено: 15.01.2025

Автор: Kirill Lopuchov, lopuchov at mail ru

Источник: 3proxy.ru, SECURITYVULNS.RU

Довольно часто перед системным администратором встает задача предоставить доступ к Internet ресурсам группе пользователей (небольшой офис,Internet кафе). Данную задачу можно решить несколькими способами, это настройка на Internet шлюзе:

  • proxy сервера
  • службы NAT (трансляция сетевых адресов)
  • раздать каждому пользователю реальный IP адрес

Давайте рассмотрим первый самый простой способ подключения, это proxy сервер традиционно для таких целей применяется популярный proxy Squid, но не всегда бывает необходимость в столь тяжеловатой программе :), да и в squid отсутствует такие иногда необходимые вещи как SOCKS4/5 сервер, TCP/UP порт маппинг. Поэтому вторым номером хочется представить вашему вниманию PROXY сервер, по названием "3proxy" адрес сайта http://3proxy.ru/ разработанный нашим программистом из г. Нижний Новгород. Одним из главных его достоинств мне кажется это компактность и высокая переносимость. Код сервера написан так, что легко компилируется как для Win9x/2000/XP так и для Linux и FreeBSD.

Возможности 3proxy

Сервер поддерживает следующие возможности:

  • HTTP(S) proxy
  • FTP over HTTP proxy
  • SOCKS4/5 proxy
  • POP3 proxy
  • TCP & UDP маппинг портов
  • листы доступа к различным службам и адресам
  • ограничение пропускной способности канала каждого пользователя (чтобы пользователь не съел весь канал, качая кучу файлов в несколько потоков :) )
  • ограничение трафика пользователя на день, неделю и месяц
  • ведение журналов через ODBC (по моему такого нет ни в одном proxy) и syslog и т.д
  • авторизацию пользователей ко всем proxy службам по имени и паролю или по ip адресам

К недостаткам можно отнести это отсутствие кэширования информации :-|. Но в с последнее время Inernet контент становится все более динамическим (то есть не поддающийся кэшированию) и может быть для кого-то экономия в 25% трафика за счет его кэширования не будет столь критична. Для тех кому все же критична, автор предлагает пока использовать цепочку из 2х серверов и в качестве кэша такие сервера как wwwoffle или им подобные, либо ждать появления поддержки кеша в 3proxy :)

Установка 3proxy

# wget http://3proxy.ru/current/3proxy.tgz
# tar -xvzf 3proxy.tgz
# cd 3proxy
# make -f Makefile.unix
# mkdir /usr/local/3proxy
# mkdir /usr/local/3proxy/logs
# mkdir /usr/local/3proxy/stat
# copy 3proxy /usr/local/3proxy
# copy 3proxy.cfg.sample /usr/local/3proxy/3proxy.cfg
# chown -R nobody:nogroup /usr/local/3proxy

Далее приведу небольшой пример конфигурационного файла 3proxy.cfg с комментариями, более подробную информацию по конфигурированию можно найти файле 3proxy.cfg.sample или в HowTo http://3proxy.ru/howtor.asp и FAQ http://3proxy.ru/faqr.asp.

Конфиг 3proxy

-------------3proxy.cfg-------------
# ВНИМАНИЕ !! не должны быть пробелов
# перед любыми опциями конфигурации !!

# ip адрес DNS сервера провайдера или локального
nserver 127.0.0.1
timeouts 1 5 30 60 180 1800 15 60

# создаем двух пользователей vasia и petia
# и назначаем им пароли 24555 , 14656 и 45455 соответственно
users vasia:CL:24555
users petia:CL:14656
users vova:CL:45455

# лог файл со списком запросов пользователей
# будет создаваться каждый день новый
log /usr/local/3proxy/logs/3proxy.log D
logformat "%d-%m-%Y %H:%M:%S %U %C:%c %R:%r %O %I %T"

# внешний интерфейс
# (через который будут уходить запросы от сервера)
external 0.0.0.0

# ip адрес интерфейса на котором будут приниматься
# запросы от клиентов
internal 172.16.0.1

# устанавливаем тип авторизации по имени и паролю
auth strong
# разрешаем доступ к портам 80,8080-8088
allow * * * 80,8080-8088
# расскоментировать секцию parent если у вас есть прокси верхнего
# уровня и заменить ip,порт,имя пользователя и пароль на свои занчения
# parent 1000 http 192.168.0.1 8080 username passwd
# allow *
# запускаем службу HTTP proxy на порту (3128 и
# -n c отключенной NTLM авторизацией)
proxy -p3128 -n

# ограничиваем толшину канала для каждого
# пользователя vasia и petia в 20000 bpsv # а для vova 10000 bps
bandlimin 20000 vasia,petia
bandlimin 10000 vova

# запускаем сервер от пользователя nobody
# (возможно в вашей ОС uid и gid пользователя nobody
# будут другими для их определения воспользуйтесь коммандой id nobody)
setgid 65534
setuid 65534
------------------------------------

После того как мы создали конфигурационный файл сервера , запускаем 3proxy командой:

/usr/local/3proxy/3proxy /usr/local/3proxy/3proxy.cfg

Настройка повторителя (репитера) для беспроводной сети WiFi с поддержкой WPA/WPA2-PSK

Обновлено: 15.01.2025
Теги: WiFi WDS

Введение

ВАЖНО!

28.10.2011: статья написана в декабре 2009 года. С тех пор (сейчас октябрь 2011) кое-что поменялось в этом мире. Появились новые модели репитеров WiFi, например, Asus RT-N12. С точки зрения принципиальных вещей, статью просмотреть все же стоит, просмотрите комментарии. Ведь кроме появления новых моделей и ухода старых, максимум поменялись кнопочки настройки повторителя. Суть осталась прежней. Отчасти это следствие того, что это все еще территория, не охваченная жесткими стандартами. Поэтому оборудование лучше брать одного производителя. Я начал работать с Asus и пока не жалел. Это не говорит о том, что сеть на основе других точек доступа, например, D-Link DWL-2100AP, будет хуже.

28.02.2012: эту статью я дополнял несколько раз, поэтому те, кто попадает сюда, смотрите сразу конец статьи: дополнения.

Первое название статьи: "Распределенная беспроводная сеть WDS. Настройка WiFi повторителя (репитера)".

Но как я выяснил позже, WDS в реализации базовых прошивок от Asus не поддерживает WPA/WPA2.

Поддержка WPA2-PSK возможна только при использовании точек доступа/маршрутизаторов в режиме повторителя (repeater или URE). Либо надо прошивать в DD-WRT и ей подобные.

Комментарий специалиста службы тех. поддержки Asus:

WDS используется , в случае когда нет возможности соединить точки с помощью кабеля.
У WDS есть слабые стороны как уменьшается скорость работы по WiFi т.к. для связи между точками используется один и тотже канал, проблема совместимости между разными производителями, шифрование только WEP.

URE это повторитель сигнала, сигнал повторяется без какой либо обработки по аналогии с проводным повторителем - хабом, когда принятый пакет просто повторяется во все порты, или с антеным крабом, когда входной сигнал повторяется в два или более выходов.

WDS работает на основе мак адресов по аналогии с сетевым коммутатором - свитчем, поэтому в WDS необходимо прописывать мак адреса соседей.

Поэтому название статьи я поменял на "Настройка повторителя (репитера) для беспроводной сети WiFi с поддержкой WPA/WPA2-PSK".

В этой статье описывается способ расширения зоны действия беспроводной сети на основе оборудования Asus класса дом/малый офис. Например, Asus WL-320gE и Asus WL-520gU. Статья написана по мотивам настройки конкретной сети в квартире в условиях плохого приема. Т.е. все нижеизложенное работает, причем стабильно.

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

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

Итак, нам нужно, чтобы на всем пространстве офиса была стабильная сеть WiFi. Для этого нам нужно иметь два устройства – маршрутизатор WiFi и точку доступа WiFi с функцией повторителя (repeater).

Справка (Википедия): Wireless Distribution System (WDS) — технология, позволяющая расширить зону покрытия беспроводной сети путем объединения нескольких WiFi точек доступа в единую сеть без необходимости наличия проводного соединения между ними (что является обязательным при традиционной схеме построения сети). Отличительной чертой технологии по сравнению с другими решениями является сохранение MAC адресов клиентов сети.

 Рис. 1 Общая схема сети WDS

Оборудование

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

Для примера возьмем широко распространенные маршрутизатор Asus WL-520gU и точку доступа Asus WL-320gE.

Точка доступа Asus WL-320gE работает в режимах точки доступа, беспроводного клиента, беспроводного моста, ретранслятора и беспроводного маршрутизатора. Нас будет интересовать возможность использовать точку доступа как ретранслятор.

Страница описания на сайте Asus: http://ru.asus.com/Product.aspx?P_ID=VmvALkGKZLlRjzeR

 

Маршрутизатор Asus WL-520gU поддерживает WDS. Эта информация доступна на сайте ru.asus.com.

Страница описания на сайте Asus:http://ru.asus.com/product.aspx?P_ID=cOWUB0XOSysr4sBM

Настройка маршрутизатора Asus Wl-520gU

Маршрутизатор Asus WL-520gU в нашем примере будет подключен к проводному провайдеру интернет и будет являться шлюзом для всех остальных компьютеров в сети.

Настройка маршрутизатора осуществляется через веб-интерфейс и не представляет никакой сложности.

Адрес маршрутизатора Asus WL-520gU в локальной сети пусть будет 192.168.1.1. Также он будет являться сервером DHCP в локальной сети (хотя в сети могут быть и другие DHCP-серверы). Нас это не должно сильно волновать. Главное – чтобы маршрутизатор и точка доступа не были бы серверами DHCP одновременно.

Настройку соединения с провайдером я опущу, т.к. у всех это будет по-разному.

Приведу настройки WiFi-сети и опций для возможности использования WDS.

  • Меню Wireless -> Interface:

    SSID: yourNetworkName
    Channel: 10
    Wireless Mode: Auto, установлена галочка 54g Protection
    Auth. mode: WPA-Personal
    WPA-Encryption: TKIP
    Network Key Rotation Interval: 0
  • Меню Wireless -> Bridge:

    AP Mode: Hybrid
    Channel: 10
    Connect to APs in Remote Bridge List: Yes (у меня при этом сам список Remote Bridge List не содержал ни одного mac-адреса)
  • Меню Wireless -> Advanced:

    Enable AfterBurner: Disabled
    Hide SSID: No (думаю, можно поиграться и сделать Yes, но реально на безопасность сети скрытие SSID не повлияет - лучше пароль придумайте похитрее.)
  • Меню System Setup -> Operation Mode:

    Выбрать режим Home Gateway

Настройка точки доступа Asus Wl-320gE как повторителя

Точка доступа в нашей сети будет иметь адрес 192.168.1.2. Как уже было сказано выше, DHCP-сервер на этой точке доступа должен быть выключен.

  • Меню IP Config -> LAN:

    IP: 192.168.1.2
    Mask: 255.255.255.0
    Gateway: 192.168.1.1
  • Меню Wireless -> Interface:

    SSID: yourNetworkName
    Wireless Mode: Auto (галочка на 54g Protection почему-то не установлена)
    Auth. mode: WPA-PSK/WPA2-PSK
    WPA/WPA2-Encryption: TKIP

    Network Key Rotation Interval: 0
  • Меню Wireless -> Advanced:

    Hide SSID: No
    Set AP Isolated: No

    Mode: URE
    Настройки URE:
    SSID: yourNetworkName
    Auth. mode: WPA/WPA2-PSK
    WPA/WPA2-Encryption: TKIP
    Network Key Rotation Interval: 0

Нюансы

Открытый SSID

Думаю, что многие обратят внимание на то, что в приведенных настройках SSID сети не скрыт. Это можно считать недостатком. Но этому есть объяснение. Сеть настраивалась у заказчика, который не ставит максимальную безопасность во главе угла, но вот простоту добавления новых устройств требовал. С этим могут столкнуться многие. Если вы не админ конкретной сети, то по десять раз объяснять, как добавить КПК или новый ноутбук к сети надоест очень быстро. По этой причине я не могу сказать, насколько удобна в работе распределенная сеть со скрытым SSID.

WPA vs. WPA2

В идеальном случае надо использовать максимальную защиту, т.е. WPA2. Но большинство беспроводных принтеров, мобильников и пр. имеют разные реализации беспроводных модулей, поэтому часто WPA2 не дает подключить практически всю периферию. В вашем случае может быть возможным использовать только WPA2.

Фильрация по MAC-адресам

Я не настраивал фильтрацию по MAC-адресам точек доступа, по соображениям, похожим на изложенные в п.1 - мне не нужны лишние проблемы с конфигурированием. Кроме того, сеть была домашней и не требовала особых мер безопасности. P.S. Что касается WiFi в офисе - я вообще против этого. Правда, бывает, что иначе и не сделать.

Итог

Вот и все. Учитывая, что настройку распределенной беспроводной сети последний раз я делал год назад, прошу не ругать меня за отсутствие каких-либо деталей или присутствие опечаток. Как всегда, комментарии приветствуются. Еще раз отмечу, при использовании прошивок от Asus для использования шифрования WPA/WPA2 нельзя настраивать WDS. Надо настраивать повторитель сигнала основного маршрутизатора.

Дополнения

  • добавлено 19.10.11: После экспериментов с прошивкой может пригодиться статья "Восстановление прошивки Asus WL-500gP".
  • добавлено 20.10.11: До кучи: если вы решите использовать роутер, прошитый в DD-WRT (другие не пробовал, если знаете, скажите) в качестве повторителя, то вы столкнетесь с кучей неясностей и в конце если и сделаете это, то скорее всего это будет режим Repeater Bridge и вторая беспроводная сеть, на которую придется переключаться беспроводным клиентам если они будут перемещаться из одной зоны сети в другую.

    Вывод: самое простое и правильное, на мой взгляд, это использовать специальное устройство, типа описанного в этой статье выше Asus WL-320gE. Это работает. В отличие от танцев, с которыми я лично не раз и не два сталкивался.

    PS: Если кто-нибудь из посетителей сайта придерживается иного мнения или знает, как сделать нормальный повторитель WiFi из роутера, прошитого в DD-WRT или другую альтернативную прошивку - очень прошу высказываться, многим пригодится. Эту статью ежедневно просматривают куча народа - это говорит о том, что эта тема нужна и интересует многих! Давайте поможем другим советом!
  • добавлено 28.02.2012: Где-то два месяца назад я пробовал расширить зону действия сети на основе роутера Asus WL-500gP (на родной прошивке Asus) с помощью Asus RT-N12. Несмотря на заявленную возможность работать репитером, постоянно прекращался доступ в интернет в тех местах, где можно было "зацепить" и Asus WL-500gP и Asus RT-N12. Я сдал репитер Asus RT-N12 обратно в магазин. Т.к. ничего адекватного на тот момент я не нашел, на время отложил поиски. Буквально сегодня утром купил аж два роутера Asus RT-N10U (с функцией повторителя), думал выкинуть старый Asus WL-500gP, т.к. я почему-то подумал, что возможно проблема была из-за него, все-таки для него прошивка уже достаточно старая. Как же я обрадовался, когда ради эксперимента "подцепил" один из Asus RT-N10U как повторитель к существующей сети и все заработало! Учитывая довольно большое количество оргтехники, уже настроенной на работу с Asus WL-500gP, я так пока и оставил один из новых роутеров нераспечатанным. В итоге, прекрасно себя показала связка из старого роутера Asus WL-500gP и нового в режиме репитера Asus RT-N10U.

Установка Firefox в домене Windows

Обновлено: 15.01.2025

Автор

Иванов Илья, http://bozza.ru, 2009

Вступление

Предыдущее название статьи: "Установка Firefox в сети Windows 2003 средствами групповой политики".

Считается, что пользователи в сети должны иметь ограниченные права и привилегии. В том числе на установку программ. Это правильно. А в вашей сети используется Firefox как основной браузер и вы уже задолбались бегать от компа к компу, вводить админские кредиты и устанавливать новые версии Firefox, выходящие с завидной регулярностью. Значительно упростить этот процесс можно с помощью домена Windows 2003, оснастки "Active Directory - Пользователи и компьютеры" и редактора групповой политики gpmc.msc.

Итак, задача: максимально упростить обновления браузера Firefox, установленного на подавляющем количестве компьютеров в сети. Исходные данные: домен Windows 2003.

Подготавливаем MSI-файл для Firefox

Думаю, что добавлю потом отдельную статью о том, откуда можно брать файлы Windows Installer вида "firefox.msi". Скажу лишь, что в нашем случае сам msi-файл и шаблон firefox.adm можно скачать отсюда.

Расшариваем какую-либо папку на сервере и даем к ней доступ юзерам на чтение, админу - полный:

расшариваем шаблон firefox.adm и firefox.msi

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

Если у вас пользователи домена уже находятся в Users или где-то еще и вы не намерены их оттуда перемещать, пропускайте следующий параграф.

Подготовка организационного подразделения (OU)

Вообще-то держать пользователей домена в Users (по-умолчанию) не рекомедуется, в т.ч. на курсах Microsoft. Поэтому мы создадим новое рганизационное подразделение (OU), к которому будем в последствии применять политику распространения Firefox.

Шаг 1: сделаем OU "OurUsers" и поместим в него пользователя "user1"

Создаем новое OU

Помещаем пользователей в новое OU

Шаг 2: Создадим отдельную политику для созданного подразделения "OurUsers"

Запускаем редактор групповой политики GPMC.MSC:

Редактор групповой политики GPMC

... и создаем связанную только с нашим OU "OurUsers" групповую политику под названием "Install Custom Software":

Создаем новый объект групповой политики

... редактируем нашу политику "Install Custom Software":

Редактируем объект групповой политики

Шаг 3: Готовим дистрибутив Firefox для развертывания в сети

В разделе "User Configuration" -> "Software settings" -> "Software Installation" щелкаем правой мышкой и создаем новый объект для установки - наш будущий инсталлятор Firefox:

Создаем новый дистрибутив

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

выбираем файл MSI

Выбираем "Assigned" (Назначенный):

Публикуем:

Публикуем установку

На этом работа с веткой "Software Installation" закончена. переходим к ветке "User Configuration" -> "Administrative Templates" и создаем новый шаблон на основе файлика firefox.adm, так же кем-то предусмотрительно скачанного ранее:

Создаем новый шаблон для Firefox

Выбираем готовый шаблон для Firefox

Ок, мы сделали новый шаблон "Firefox". Теперь отредактируем его, как нам того требуется. Настроек не так много, но минимум все-таки настроить можно - стартовая страница, адрес прокси и пр.

Редактируем параметры шаблона для Firefox

Все. С шаблонами и прочими зверями покончено. Закрываем все открытые окна на сервере (если не помешает другим задачам, естественно), Пуск -> Выполнить -> gpupdate /force

Шаг 4: Устанавливаем на клиенте свежий Firefox

Созерцаем пару секунд окно командного интерпритатора и пробуем залогиниться под учетной записью "user1" на рабочую станцию. Выполняем команду "gpupdate /force", выходим и снова залогиниваемся на рабочей станции. Запускаем на рабочей станции "Установка и удаление программ", и в окне "Установка программ" созерцаем:

Устанавливаем Firefox на клиенте

Вот! Теперь даже пользователь с ограниченными правами сможет установить уже настроенный броузер Firefox, а если Firefox уже был установлен, то он быдет обновлен до новой версии, в которой исправлены всякие недочеты и уязвимости.

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

Минусы

Нельзя не сказать о существенных минусах этого способа. Первый, и, наверное, самый существенный - описанный способ это НЕ АВТОМАТИЧЕСКАЯ УСТАНОВКА ПРОГРАММ НА ВСЕ КОМПЬЮТЕРЫ В ДОМЕНЕ. Для автоматической установки используется другой метод, думаю, позже я опишу его, а пока сам до конца не понял, как просто и четко работать с MST-файлами настроек в случае подготовки дистрибутива для автоматического развертывания в сети. Отмечу, что статей про автоматическое развертывание пакета Microsoft Office в сети домена довольно много, но попробуйте найдите хоть что-то вразумительное о том, как сделать шаблон настроек firefox.mst - и вы меня поймете.

Кстати, если вы знаете ПРОСТЫЕ И ПОНЯТНЫЕ объяснения, как подготавливать MST-файлы, ОБЯЗАТЕЛЬНО ПИШИТЕ ОБ ЭТОМ в комментариях к этой статье.

Второй минус - опять же непрозрачность подготовки шаблона firefox.adm. Признаюсь, я не успел в этом покопаться, поэтому опять же - КОММЕНТАРИИ И СОВЕТЫ ПРИВЕТСТВУЮТСЯ.

Материалы

В подготовке материала я использовал:

  1. http://frontmotion.com/FMFirefoxCE/download_fmfirefoxce.htm
  2. http://www.mednikov.ru/?p=85

и вечер собственного времени.


OpenVPN: Individual Firewall Rules for Connecting Clients

Обновлено: 15.01.2025
Теги: OpenVPN

(содержимое одной из глав книги OpenVPN: Building and Integrating Virtual Private Networks)

One striking possibility OpenVPN offers is a setup where:

  • An OpenVPN machine acts as a server that protects the company's network, admitting access for OpenVPN clients.
  • The clients are automatically assigned IPs by the server.
  • The clients are equipped with certificates, and identified and authorized by these certificates.

The scripting parameter learn-address in the server's OpenVPN configuration file will have the server execute a script whenever an authorized client connects to the VPN and is assigned an address. This parameter takes the full path to a script as an option:

learn-address /etc/openvpn/scripts/openvpnFW

In this example, the script openvpnFW will be executed each time a client is assigned an IP address and will be passed three variables by the OpenVPN server process:

  1. $1: The action taken; this may be one of add, delete, update
  2. $2: The IP assigned to the client connecting
  3. $3: The common name in the subject line of the client's certificate

Add the line learn-address /etc/openvpn/scripts/openvpnFW to your OpenVPN server configuration file and edit the file /etc/openvpn/scripts/openvpnFW to be like the following. These lines will show how to make use of these parameters in a short Linux shell script:

#!/bin/sh
LOGFILE=
DATE=`/bin/date`
echo $DATE $1 $2 $3 >> $LOGFILE

This script will only export the variables passed to the logfile, including a timestamp that is added by the command date. Stop and start your tunnel a few times. Now let's have a look at the file /var/log/openvpn/connections.log:

Mi Feb 1 04:33:53 CET 2006 update 10.99.0.3 mfeilner
Do Feb 2 04:34:33 CET 2006 update 10.99.0.3 mfeilner
Fr Feb 3 04:34:14 CET 2006 update 10.99.0.3 mfeilner
Sa Feb 4 04:34:53 CET 2006 update 10.99.0.3 mfeilner
So Feb 5 04:34:43 CET 2006 update 10.99.0.3 mfeilner

This example shows my VPN client reconnecting every day. This alone might yet be an interesting feature, if you want to keep track of your users and their VPN connections. However, we can do more. Let's add some more lines to our openvpnFW script:

if [ $1 = add ]
then
/etc/openvpn/scripts/$2.FW_connect.sh
fi
if [ $1 = delete ]
then
/etc/openvpn/scripts/$2.FW_disconnect.sh
fi

Two simple tests are run and, depending on the content of the variable $1, different firewall scripts are executed. Let's express this in brief. If the first variable passed is add, then the script /etc/openvpn/scripts/$2.FW_connect.sh is run, where $2 will be replaced by the IP of the client connecting. If for example a client mfeilner connects and is assigned the IP 10.99.0.3, then the variables passed to this script openvpnFW will be:

add 10.99.0.3 mfeilner

And the script run will be called: /etc/openvpn/scripts/10.99.0.3.FW_connect.sh.
However, if the variables passed to openvpnFW are the following:

delete 10.99.0.3

then the script /etc/openvpn/scripts/10.99.0.3.FW_disconnect.sh will be executed.

I think you have already guessed that these two scripts contain firewall rules (like iptables statements) for the client with the certificate mfeilner. Even though all of this could be done within one single script, I prefer to have the tests and firewall rules split up in several scripts.

This setup can become very powerful and fairly complex. A client that has its default route set through the tunnel can be allowed selective Internet access, simply by enabling or disabling, routing or forwarding. And access to the local servers can also be easily managed: E.g. A SAP server might only be available for road warriors from 7 am to 6 pm, whereas during the night firewall rules protect the server.





Последние комментарии