Не прошло и недели с появлении камеры каскад Радуга и уже есть новое поступление webcam online Набережная, Центральный пляж.
К сожалению в последнее время часто стали пропадать потоки по разным причинам, но мы надеемся что проект будит развиваться.
Не прошло и недели с появлении камеры каскад Радуга и уже есть новое поступление webcam online Набережная, Центральный пляж.
К сожалению в последнее время часто стали пропадать потоки по разным причинам, но мы надеемся что проект будит развиваться.
![pix501_1[1]](http://www.skleroznik.in.ua/wp-content/uploads/2013/07/pix501_11.jpg)
В небольшой организации возникла необходимость получить доступ из Интернет к ее внутренним ресурсам по VPN. Для этой цели было приобретено устройство Cisco Pix501, которое должно было стать шлюзом для LAN организации, быть точкой терминирования VPN-соединений и выполнять следующие функции по разграничению доступа:
Исходные данные:
LAN организации — 192.168.1.0/24 (внутренние адреса)
192.168.1.1 — шлюз (Pix501 «inside»)
192.168.1.2 — внутренний адрес web-сервера
192.168.1.3 — proxy- и dns- сервер
192.168.1.4 — станция управленияАдреса, выдаваемые VPN-пользователям — 192.168.2.0/24 (внутренние адреса)
Адреса, выданные провайдером — 10.10.10.0/24 (внешние адреса)
10.10.10.1 — шлюз (Pix501 «outside»)
10.10.10.2 — внешний адрес web-сервера
10.10.10.254 — адрес шлюза провайдера
В организации нет сервера ААА, поэтому VPN-пользователи будут заводиться локально на Pix501. Итак, приступаем к конфигурированию:
Prompt Command Description
pixfirewall> // Пользовательский режим pixfirewall> enable // Входим в режим enable pixfirewall> Password: ******** // Вводим пароль enable pixfirewall# // Enable mode pixfirewall# conf t // Входим в режим конфигурирования (configure terminal)
Предварительная настройка
pixfirewall(config)# config factory-default // Сбрасываем все настройки в заводские pixfirewall(config)# hostname Pix501 // Меняем имя устройству Pix501(config)# no dhcpd address inside // Запрещаем DHCPD на внутреннем интерфейсе Pix501(config)# ip address outside 10.10.10.1 255.255.255.0 // Устанавливаем IP-адрес на интерфейсе outside Pix501(config)# ip address inside 192.168.1.1 255.255.255.0 // Устанавливаем IP-адрес на интерфейсе inside Pix501(config)# route outside 0.0.0.0 0.0.0.0 10.10.10.254 1 // Назначаем маршрут по умолчанию (на IP-адрес провайдера) Pix501(config)# no http 192.168.1.0 255.255.255.0 inside // Удаляем доступ по HTTP, оставшийся из заводских установок (нам он не нужен, т.к. есть протокол SSH :) Pix501(config)# timeout xlate 3:00:00 // Устанавливаем таймаут для транслируемых адресов Pix501(config)# snmp-server community H7gh^Kbget*65mk // Меняем SNMP-community на нечто уникальное (запоминаем)
Настраиваем доступ к PIX по SSH
Pix501(config)# domain-name my.domain.ru // Указываем домен Pix501(config)# ca generate rsa key 1024 // Генерируем ключи RSA (для доступа к PIX по SSH) Pix501(config)# show ca mypubkey rsa // Просматриваем сгенерированные ключи P ix501(config)# ca save all // Сохраняем информацию Pix501(config)# password 8wnz$INQ // Устанавливаем консольный пароль (8wnz$INQ) Pix501(config)# enable password 6gwp^JGT // Устанавливаем пароль (6gwp^JGT) для enable mode Pix501(config)# username user1 password User1 [ username admin password Admin privilege 15 ] // Заводим в локальной базе пользователя user1 с паролем User1. Заводим столько пользователей, сколько нужно. Пользователю можно указать режим привилегий, например, privilege 15 (при входе, сразу попадаем в режим enable) Pix501(config)# aaa authentication ssh console LOCAL // Указываем, что вход с консоли и по SSH аутентифицировать по локальной базе пользователей. Pix501(config)# aaa authorization command LOCAL // Устанавливаем локальный режим авторизации Pix501(config)# ssh 192.168.1.4 255.255.255.255 inside // Разрешаем доступ по SSH с интерфейса "inside" для станции управления 192.168.1.4
Настраиваем логирование событий
Pix501(config)# logging on // Включаем режим логирования событий Pix501(config)# logging timestamp // Timestamp logging: enabled Pix501(config)# logging buffered debugging // Buffer logging: level debugging Pix501(config)# logging trap informational // Trap logging: level informational Pix501(config)# logging history errors // History logging: level errors Pix501(config)# logging facility 6 // Facility: 6
Настраиваем статические маршруты и списки доступа
Pix501(config)# static (inside, outside) tcp 10.10.10.2 80 192.168.1.2 80 netmask 255.255.255.255 // Статическая трансляция порта tcp/80 на внутренний WEB-сервер Pix501(config)# static (inside, outside) tcp 10.10.10.2 443 192.168.1.2 443 netmask 255.255.255.255 // Статическая трансляция порта tcp/443 на внутренний WEB-сервер Pix501(config)# access-list acl-inside permit tcp host 192.168.1.3 any eq 80 // Разрешаем HTTP запросы с 192.168.1.3 Pix501(config)# access-list acl-inside permit tcp host 192.168.1.3 any eq 443 // Разрешаем HTTPS запросы с 192.168.1.3 Pix501(config)# access-list acl-inside permit udp host 192.168.1.3 any eq 53 // Разрешаем DNS запросы с 192.168.1.3 Pix501(config)# access-list acl-inside permit tcp host 192.168.1.4 any eq 25 // Разрешаем SMTP запросы с 192.168.1.4 Pix501(config)# access-list acl-inside permit icmp 192.168.1.0 255.255.255.0 any // Разрешаем пинг из внутренней сети на ANY Pix501(config)# access-group acl-inside in interface inside // Назначаем access-list acl-inside на интерфейс inside Pix501(config)# access-list acl-outside permit tcp any host 10.10.10.2 eq 80 // Разрешаем HTTP запросы на 192.168.1.2 Pix501(config)# access-list acl-outside permit tcp any host 10.10.10.2 eq 443 // Разрешаем HTTPS запросы на 192.168.1.2 Pix501(config)# access-group acl-outside in interface outside // Назначаем access-list acl-outside на интерфейс outside
Настраиваем VPN-доступ
Pix501(config)# ip local pool vpn_users 192.168.2.1-192.168.2.254 // Создаем локальный пул адресов vpn_users (192.168.2.1 - 254) Pix501(config)# access-list acl-nonat permit ip 192.168.1.0 255.255.255.0 192.168.2.0 255.255.255.0 // Разрешаем доступ по IP из внутренней сети к адресам пула vpn_users Pix501(config)# nat (inside) 0 access-list acl-nonat // Не транслировать адреса при прохождении пакетов из внутренней сети к адресам клиентов, получивших доступ во внутреннюю сеть по VPN-туннелю Pix501(config)# vpdn group 1 accept dialin pptp // Создаем VPDN группу с идентификатором 1 и разрешаем входящие соединения по протоколу PPTP Pix501(config)# vpdn group 1 ppp authentication mschap // Аутентификация PPP-соединений по протоколу MSCHAP Pix501(config)# vpdn group 1 ppp encryption mppe auto required // Требуется криптование через PPP-соединение Pix501(config)# vpdn group 1 client configuration address local vpn_users // При успешной авторизации выдавать адреса из пула vpn_users Pix501(config)# vpdn group 1 client authentication local // Аутентифицировать VPDN-пользователей по локальной базе Pix501(config)# vpdn enable outside // Разрешить входящие VPDN-соединения на интерфейсе outside Pix501(config)# vpdn username vpnuser1 password 4lsb%RRJ // Создаем VPDN пользователя vpnuser1 с паролем 4lsb%RRJ Pix501(config)# access-list acl-outside permit tcp 192.168.2.0 255.255.255.0 host 192.168.1.4 eq 3389 // Разрешаем доступ по VPN-туннелю к станции управления по RDP Pix501(config)# access-list acl-outside permit icmp 192.168.2.0 255.255.255.0 192.168.1.0 255.255.255.0 // Разрешаем пинг из VPN-туннеля к адресам внутренней сети Pix501(config)# exit // Выходим из режима конфигурирования Pix501# wr mem // Записываем конфигурацию в память (write memory) Building configuration... Cryptochecksum: xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx [OK] Pix501#
В заключение привожу выдержку из письма, отправленного мною в эту организацию:
From: Гарейшин Валерий Рифович
Sent: …
To: …
Subject: PIX setup — настройка доступа (summary)
[…skip…]
Справка по любой команде PIXOS / IOS выдается при вводе знака вопроса — например «?», «show ?», … Общие принципы настройки access-lists на Cisco PIX следующие:
Пример просмотра acl-inside:
Pix501# show access-list acl-inside access-list acl-inside; 5 elements access-list acl-inside line 1 permit tcp host 192.168.1.3 any eq www (hitcnt=5) access-list acl-inside line 2 permit tcp host 192.168.1.3 any eq https (hitcnt=8) access-list acl-inside line 3 permit udp host 192.168.1.3 any eq domain (hitcnt=3) access-list acl-inside line 4 permit tcp host 192.168.1.4 any eq smtp (hitcnt=1) access-list acl-inside line 5 permit icmp 192.168.1.0 255.255.255.0 any (hitcnt=36) Pix501#
Каждому правилу в листе соответствует свой элемент. Если добавлять правило (элемент) в ACL, то, необходимо указывать номер линии. Соответственно, если будет добавляться правило под номером line 5, то, та строчка, которая была на этом месте, станет line 6 (сдвинется вниз). Порядок следования правил важен — если первой строчкой запретить все, то правила, находящиеся ниже не будут иметь значения. Таким образом, если необходимо открыть доступ по tcp/110 с хоста 192.168.1.4 на все адреса и разместить его на 5-й строчке листа, то необходимо сделать следующее:
Pix501# conf t Pix501(config)# access-list acl-inside line 5 permit tcp host 192.168.1.4 any eq 110 Pix501(config)# ^z Pix501#
Строчка, которая была на 5-м месте станет элементом №6. Параметр hitcnt показывает, сколько раз применялось правило.
На Вашем PIX включено логирование событий (syslog). Посмотреть перечень syslog events можно сомандой sh logging. Если на PIX поступил пакет и был запрещен каким нибудь ACL, то это будет отмечено в журнале syslog с указанием листа который его запретил…
Оригинал : rich62.ru/lib/network/vpn/pix501vpn.html
Когда возникает необходимость настроить почтовую систему для компании в первую очередь на ум приходит использовать решения от Microsoft — Exchange и Outlook. К сожалению, эти решения не обеспечивают достаточной гибкости и многим не подходят по разным параметрам.
Хорошо, но что же использовать вместо них, ведь хочется такой же красивой и прозрачной для пользователя работы с почтой, которую обеспечивает протокол MAPI? Небольшая перетасовычка и на свет появляется вполне очевидное и на самом деле безальтернативное решение — IMAP. IMAP, слава Богу, в современном мире в той или иной степени поддерживают чуть ли не все почтовые клиенты, так что выбор у нас огромен. Но если присмотреться внимательней, то он сужается до весьма скромного множества из одного-двух наименований.
Итак, нам бы хотелось:
Недолгий поиск в интернете может поведать, что единственный вариант, который можно было бы рассмотреть поближе — это Mozilla Thunderbird. Но вот вопрос: может ли Thunderbird предоставить весь необходимый функционал, чтобы можно было с лёгкостью заменить им связку Exchange и Outlook? Оказывается не только может, но и позволяет добиться куда как большего, чем просто банальное подражание продуктам Microsoft.

Для начала, конечно, надо определиться с сервером, а то что-то я слишком лихо собрался заменять почтовым клиентом целую инфраструктуру. Я использую Dovecot, поскольку он является одним из самых надёжных и гибких продуктов в своей области, но самое главное — Dovecot единственный широкоиспользуемый сервер, который полностью реализует поддержку протокола IMAP. Вы можете использовать любой другой сервер, однако для достижения максимальной эффективности ваш сервер должен как минимум поддерживать IMAP ACL.
Теперь перейдём непосредственно к Thunderbird. Все настройки Thunderbird хранит в виде столь любимых многими текстовых конфигурационных файлов, правда, в несколько необычной манере. Конфиги Thunderbird представляют из себя скрипты на JavaScript. И Thunderbird не просто читает их, а исполняет. Из этого следует весьма забавный вывод: можно использовать множество возможностей JS для динамического формирования нужных параметров. Конечно, поддержка JS в Thunderbird далеко не полная, но нам её хватит с лихвой.
Основной конфигурационный файл Thunderbird хранится в профиле пользователя и называется prefs.js. На всякий случай: профиль Thunderbird находится либо в домашней папке (для Linux), либо в AppData (для Windows), либо в папке программы (для Thunderbird Portable).
Формат указанного файла весьма простой, он весь состоит из строчек вида
user_pref("app.update.auto", false);
Я думаю понятно, что подобные строчки задают некоторое значение указанным в качестве первого аргумента параметрам.
Однако редактировать prefs.js вручную нельзя, поскольку он должен исправляться только самим Thunderbird. При этом непосредственно в программе есть встроенный редактор конфигурации, который позволяет получить доступ ко всем опциям из prefs.js. Попасть в него можно зайдя в меню Инструменты->Настройки…, в открывшемся окне перейдя в раздел Дополнительные, затем выбрав вкладку Основные и нажав на ней кнопку Редактор настроек…
Этот редактор вам ещё очень пригодится, так что обязательно его отыщите. Хотя реально что-то изменять через него вам вряд ли понадобится, зато он крайне полезен для поиска названий нужных опций.
Вот мы и подошли к самому интересному. Как я уже сказал, напрямую редактировать prefs.js нельзя, но это и не проблема, поскольку в Thunderbird есть ещё один уровень настроек, с помощью которого можно как угодно управлять пользовательскими параметрами из prefs.js.
Этот интригующий механизм также полностью основан на JavaScript скриптах, но в этот раз вы уже вольны изменять что угодно и как угодно, в том числе используя все доступные инструменты и возможности JavaScript как языка программирования.
Для включения дополнительного механизма настройки надо немного поменять файлы в установочной директории Thunderbird. Для начала необходимо добавить две строчки в конец файла greprefs/all.js, найти который можно в /usr/lib/thunderbird-xxx/ в Ubuntu Linux или рядом с Thunderbird.exe в Windows. Вот эти строчки:
pref("general.config.obscure_value", 0);
pref("general.config.filename", "thunderbird.cfg");
Вторая содержит собственно имя конфигурационного файла, который должен использовать Thunderbird, а первая отвечает за его шифрование. Обычно шифровать ничего не нужно, поэтому значение первого параметра лучше выставлять равным 0.
Теперь необходимо создать указанный файл thunderbird.cfg. Располагаться он должен в той же папке, что и основной исполняемый файл Thunderbird. Узнать, где находится Thunderbird в Linux можно командой
which thunderbird
Ну а в Windows вы можете заглянуть, например, в свойства ярлыка.
Что может располагаться в thunderbird.cfg? Любой JavaScript код, который сможет выполнить Thunderbird. Однако нам-то надо работать с опциями настройки, для этого можно использовать следующие функции:
function pref(prefName, value) function defaultPref(prefName, value) function lockPref(prefName, value) function unlockPref(prefName) function getPref(prefName) function clearPref(prefName) function getenv(envName)
Есть ещё парочка доступных функций, но они вам вряд ли понадобятся. Самая полная статья, которую я нашёл на эту тему, находится здесь.
Хорошо, что же делают все эти функции?
Можно ещё получать данные из LDAP, но при этом не поддерживается авторизация, что сводит на нет полезность этого механизма. Да и он не нужен, как вы вскоре убедитесь.
Вот простейший пример файла thunderbird.cfg, который немного «тюнит» Thunderbird:
// Небольшой тюнинг Thunderbird с помощью Mozilla AutoConfig
try {
// Получаем имя пользователя, Thunderbird запустившего (и домашнюю папку, хоть она нам и не нужна)
if(getenv("USER") != "") {
// *NIX параметры
var env_user = getenv("USER");
var env_home = getenv("HOME");
} else {
// Windows параметры
var env_user = getenv("USERNAME");
var env_home = getenv("HOMEPATH");
}
// Ставим аккаунтом по умолчанию account1
defaultPref("mail.accountmanager.defaultaccount", "account1");
// Добавляем по умолчанию в список аккаунтов только account1
defaultPref("mail.accountmanager.accounts", "account1");
// Жёстко закрепляем за account1 сервер server1 (IMAP)
lockPref("mail.account.account1.server", "server1");
// Ставим в качестве сервера локальных папок основной IMAP сервер пользователя,
// тем самым полностью отключая локальные папки в клиенте
lockPref("mail.accountmanager.localfoldersserver", "server1");
// Отключаем полосочку "Узнайте о своих правах" при первом запуске
lockPref("mail.rights.version", 1);
// Отключаем автообновление клиента. Если не отключить, то при обновлении может измениться файл
// all.js и тогда весь механизм Mozilla AutoConfig сломается.
lockPref("app.update.enabled", false);
lockPref("extensions.update.enabled", false);
// Настройки IMAP сервера
lockPref("mail.server.server1.type", "imap");
lockPref("mail.server.server1.hostname", "mail.domain.com"); // Неизвестно, зачем два параметра, но нужны оба,
lockPref("mail.server.server1.realhostname", "mail.domain.com"); // иначе можно будет менять пользователю
lockPref("mail.server.server1.port", 143); // Порт сервера
lockPref("mail.server.server1.socketType", 2); // Использовать STARTLS
lockPref("mail.server.server1.name", env_user);
lockPref("mail.server.server1.userName", env_user); // Логин пользователя,
lockPref("mail.server.server1.realuserName", env_user); // комментарий аналогично hostname
lockPref("mail.server.server1.login_at_startup", true); // Очень важный параметр! Без него вообще не заработает ничерта;)
lockPref("mail.server.server1.isSecure", true); // Защищённый сервер
// Настройки SMTP сервера
lockPref("mail.smtpserver.smtp1.hostname", "mail.domain.com");
lockPref("mail.smtpserver.smtp1.port", 25);
lockPref("mail.smtpserver.smtp1.description", "SMTP сервер ЗАО «Рога и Копыта»");
lockPref("mail.smtpserver.smtp1.try_ssl", 2);
lockPref("mail.smtpserver.smtp1.auth_method", 1);
lockPref("mail.smtpserver.smtp1.username", env_user);
// Настройки аккаунта - адреса почты и т.д.
defaultPref("mail.identity.id1.fullName", env_user); //Это поле пользователь сможет поменять сам, но по умолчанию там будет его логин
lockPref("mail.identity.id1.useremail", env_user + "@domain.com");
lockPref("mail.identity.id1.reply_to", env_user + "@domain.com");
lockPref("mail.identity.id1.valid", true);
lockPref("mail.identity.id1.smtpServer", "smtp1");
lockPref("mail.identity.id1.organization", "ЗАО «Рога и Копыта»");
// Привязываем ID к аккаунту
lockPref("mail.account.account1.identities", "id1");
// Адресные книги LDAP
lockPref("ldap_2.servers.domain.uri", "ldap://dc.domain.com/OU=Пользователи,OU=domain,DC=DOMAIN,DC=COM??sub?(mail=*)");
lockPref("ldap_2.servers.domain.auth.dn", "DOMAIN\\" + env_user);
lockPref("ldap_2.servers.domain.auth.saslmech", "");
lockPref("ldap_2.servers.domain.description", "Сотрудники 'Рога и Копыта'");
lockPref("ldap_2.servers.domain.filename", "empl.mab");
lockPref("ldap_2.servers.domain.maxHits", 300);
// Автодополнение адресов из книги сотрудников
lockPref("ldap_2.autoComplete.directoryServer", "ldap_2.servers.domain");
lockPref("ldap_2.autoComplete.useDirectory", true);
} catch(e) {
displayError("lockedPref", e);
}
Файл подробно комментирован, так что надеюсь вы разберётесь, что к чему. Блок try нужен для перехвата ошибок, лучше его не убирайте (иначе в случае чего Thunderbird просто не запустится). Кроме того, все параметры и нужные значения для них для своей конкретной инфраструктуры я скопировал из упоминавшегося редактора конфигурации, настроив предварительно всё вручную обычным способом. Рекомендую всегда именно так и делать, иначе вы будете долго гадать какое значение нужно указать, например, для параметра mail.server.server.socketType в вашем случае.
То есть алгоритм действия по поиску нужных параметров и указанию их значений примерно такой: сначала настраиваем что-то на чистом Thunderbird вручную, а потом копируем все нужные настройки из редактора в самом Thunderbird в скрипт автоконфигурации.
Теперь достаточно при установке Thunderbird положить этот скрипт в папочку с исполняемым файлом (и не забыть добавить две строчки в all.js!), и все ваши пользователи, которые будут открывать Thunderbird на этом компьютере, получат автоматически настроенные параметры своих аккаунтов, а так же подключённую адресную LDAP книгу с сотрудниками организации.
Для проверки работоспособности скрипта можно заглянуть всё в тот же редактор настроек Thunderbird. В нём статус параметров, для которых была выполнена функция lockPref(), должен быть «заблокировано». Если это не так — значит вы где-то ошиблись и ваш скрипт не работает.
Кстати, обратите внимание, хитрый трюк с указанием в качестве localfoldersserver сервера IMAP позволяет отключить локальные папки в клиенте. Это бывает немаловажно в организации с внутренним IMAP сервером и блондинками, которые не понимают, что локальные папки на то и локальные, что хранятся в профиле пользователя на конкретном компьютере, а не на сервере.
Как я уже сказал, вы можете использовать практически все возможности стандартного JavaScript в скрипте автоконфигурации, плюс можете получать значение системных переменных. Это уже очень неплохо, и пытливые администраторы уже наверно стали прикидывать варианты автоматического обновления скриптов thunderbird.cfg на локальных компьютерах. К счастью, изобретать велосипед вовсе не обязательно.
В механизм автонастройки Thunderbird встроена возможность загрузки конфигурационного файла с сервера по указанному URL. Воспользоваться ей очень просто — необходимо в файле, на который ссылается опция general.config.filename из all.js (то есть в нашем случае thunderbird.cfg) указать всего две строчки:
lockPref("autoadmin.global_config_url", "http://mail.domain.com/thunderbird.cfg");
lockPref("autoadmin.append_emailaddr", false);
Ну и конечно по указанному адресу должен находится нужный вам конфигурационный файл вроде того, что приведён в предыдущем разделе. Зачем нужен второй параметр — не совсем понятно, но судя по названию лучше его не включать.
Итого: мы получили достаточно эффективный механизм централизованной настройки Thunderbird. Однако ему явно не хватает гибкости, поскольку JavaScript, увы, многого не умеет. Например — обращаться к внешним источникам данных, как то SQL базы или LDAP каталоги. Соответственно провести тонкую настройку клиента под конкретного пользователя у вас вряд ли получится.
Но если задуматься, это можно легко обойти. Ведь мы храним конфигурационный файл на HTTP сервере, а значит можем его генерировать с помощью полноценного PHP или Perl скрипта на стороне сервера, что значительно расширяет возможности по тонкой настройке, делая их фактически безграничными.
Осталось дело за малым — для тонкой настройки под конкретного пользователя конфигурационного скрипта, а следовательно и Thunderbird, необходимо, чтобы клиент каким-то образом сообщал серверу хотя бы имя пользователя. Thunderbird его может легко вычислить с помощью уже описанной функции getent, ну а передать его можно прямо в URL в виде GET-переменной. Но тут возникает одна проблема: Thunderbird почему-то упорно игнорирует URL с GET-переменными в параметре autoadmin.global_config_url. Хотя это конечно тоже не проблема, ведь с помощью mod_rewrite мы можем на стороне сервера преобразовать обычный URL некоторого вида в URL c GET-переменными и передать уже этот URL скрипту.
Чтобы долго не объяснять, перейдём к практике. Конечный содержимое моего файла thunderbird.cfg, лежащего рядом с бинарником самого Thunderbird, имеет такой вот вид:
// Начальные параметры настройки Thunderbird грузим с сервера
if(getenv("USER") != "") {
// *NIX settings
var env_user = getenv("USER");
var env_home = getenv("HOME");
} else {
// Windows settings
var env_user = getenv("USERNAME");
var env_home = getenv("HOMEPATH");
}
lockPref("autoadmin.global_config_url", "http://mail.domain.com/tb/user/"+env_user);
lockPref("autoadmin.append_emailaddr", false);
Таким образом запущенный из под учётной записи пользователя malamut Thunderbird за настройками полезет по адресу
http://mail.domain.com/tb/user/malamut
На сервере mail.domain.com у меня стоит Apache с mod_rewrite и mod_perl, как это дело настраивать вместе пожалуй объяснять не буду. В папочке tb/ в каталоге сайта mail.domain.com лежит Perl-скрипт conf.pl, который собственно генерирует конфигурационные файлы для Thunderbird, и файл .htaccess такого вот содержания:
Options -Indexes +ExecCGI AddHandler cgi-script .pl RewriteEngine on RewriteBase /tb RewriteRule ^user/(.*) conf.pl?user=$1 [L]
Таким образом запросы по URL вида
http://mail.domain.com/tb/user/malamut
преобразуются в запросы по URL вида
http://mail.domain.com/tb/conf.pl?user=malamut
Осталось только написать Perl скрипт, который будет брать из GET-переменных имя пользователя и выдавать соответствующий конфигурационный файл для Thunderbird.
Вот пример такого скрипта:
#!/usr/bin/perl
use 5.010;
use CGI qw/:standard/;
# Параметры
$smtp_server = "mail.domain.com";
$imap_server = "mail.domain.com";
$organization = "ЗАО «Рога и Копыта»";
# Прикидываемся жаваскриптом
print header(
-type=>'application/javascript'
);
# Username - из GET переменных
$user = param('user');
unless ($user) { die "We need a user, please!\n" }
# Нам нужен user в lovercase, иначе будут проблемы с большинством IMAP серверов. Поскольку username берётся
# из переменной глупейшей винды, то там может быть любое награмождение заглавных и строчных букв.
$user = lc $user;
#########################################################################
# Специфичные для конкретной БД пользователей функции
# Получаем все адреса нужного пользователя. Первый будет основным
# FIXME: нужно реализовать эту функцию для вашей БД
@mails = getEmails($user);
# Получаем полное имя пользователя
# FIXME: нужно реализовать эту функцию для вашей БД
$name = getName($user);
#########################################################################
# Создаём конечный конфигурационный файл
print <
Некоторые комментарии чуть ниже. А пока при обращении по адресу
http://mail.domain.com/tb/user/malamut
получим примерно следующий вывод, сгенерированный приведённым скриптом:
//Параметры автонастройки Thunderbird для пользователя malamut (Malamut)
try {
// Основные параметры настройки серверов
// Добавляем аккаунт в список уже подключённых аккаунтов, если его там ещё нет
var accounts = getPref("mail.accountmanager.accounts");
var accounts_s = accounts + ",";
if (! (accounts_s.indexOf("account1,")+1) ) {
accounts = accounts + ",account1";
}
pref("mail.accountmanager.accounts",accounts);
// Настройки IMAP сервера
lockPref("mail.server.server1.type", "imap");
lockPref("mail.server.server1.hostname", "mail.domain.com"); // Неизвестно, зачем два параметра, но нужны оба,
lockPref("mail.server.server1.realhostname", "mail.domain.com"); // иначе можно будет менять пользователю
lockPref("mail.server.server1.port", 143); // Порт сервера
lockPref("mail.server.server1.socketType", 2); // Использовать STARTLS
lockPref("mail.server.server1.name", "Malamut");
lockPref("mail.server.server1.userName", "malamut"); // Логин пользователя,
lockPref("mail.server.server1.realuserName", "malamut"); // комментарий аналогично hostname
lockPref("mail.server.server1.login_at_startup", true); // Очень важный параметр! Без него вообще не заработает ничерта;)
lockPref("mail.server.server1.isSecure", true); // Защищённый сервер
// Привязываем указанный IMAP сервер к аккаунту
lockPref("mail.account.account1.server", "server1");
// Настройки SMTP сервера
lockPref("mail.smtpserver.smtp1.hostname", "mail.domain.com");
lockPref("mail.smtpserver.smtp1.port", 25);
lockPref("mail.smtpserver.smtp1.description", "SMTP сервер ЗАО «Рога и Копыта»");
lockPref("mail.smtpserver.smtp1.try_ssl", 2);
lockPref("mail.smtpserver.smtp1.auth_method", 1);
lockPref("mail.smtpserver.smtp1.username", "malamut");
// Добавляем SMTP в список
var smtp = getPref("mail.smtpservers");
var smtp_s = smtp + ",";
if (! (smtp_s.indexOf("smtp1,")+1) ) {
smtp = smtp + ",smtp1";
}
pref("mail.smtpservers", smtp);
// Отключаем полосочку "Узнайте о своих правах" при первом запуске
lockPref("mail.rights.version", 1);
// Отключаем автообновление
lockPref("app.update.enabled", false);
lockPref("extensions.update.enabled", false);
// Ставим в качестве сервера локальных папок основной IMAP сервер пользователя,
// тем самым полностью отключая локальные папки в клиенте
lockPref("mail.accountmanager.localfoldersserver", "server1");
// Блокируем корпоративный аккаунт почты в качестве основного аккаунта TB
lockPref("mail.accountmanager.defaultaccount", "account1");
// Ставим в качестве сервера локальных папок основной IMAP сервер пользователя,
// тем самым полностью отключая локальные папки в клиенте
lockPref("mail.accountmanager.localfoldersserver", "server1");
// Адрес [email protected] для пользователя malamut (Malamut)
defaultPref("mail.identity.id1.fullName", "Malamut");
lockPref("mail.identity.id1.useremail", "[email protected]");
lockPref("mail.identity.id1.reply_to", "[email protected]");
lockPref("mail.identity.id1.valid", true);
lockPref("mail.identity.id1.smtpServer", "smtp1");
lockPref("mail.identity.id1.organization", "ЗАО «Рога и Копыта»");
lockPref("mail.identity.id1.archive_folder", "imap://[email protected]/Archives");
lockPref("mail.identity.id1.draft_folder", "imap://[email protected]/Drafts");
lockPref("mail.identity.id1.drafts_folder_picker_mode", 0);
lockPref("mail.identity.id1.fcc_folder", "imap://[email protected]/Sent");
lockPref("mail.identity.id1.fcc_folder_picker_mode", 0);
lockPref("mail.identity.id1.stationery_folder", "imap://[email protected]/Templates");
// Адрес [email protected] для пользователя malamut (Malamut)
defaultPref("mail.identity.id2.fullName", "Malamut");
lockPref("mail.identity.id2.useremail", "[email protected]");
lockPref("mail.identity.id2.reply_to", "[email protected]");
lockPref("mail.identity.id2.valid", true);
lockPref("mail.identity.id2.smtpServer", "smtp1");
lockPref("mail.identity.id2.organization", "ЗАО «Рога и Копыта»");
lockPref("mail.identity.id2.archive_folder", "imap://[email protected]/Archives");
lockPref("mail.identity.id2.draft_folder", "imap://[email protected]/Drafts");
lockPref("mail.identity.id2.drafts_folder_picker_mode", 0);
lockPref("mail.identity.id2.fcc_folder", "imap://[email protected]/Sent");
lockPref("mail.identity.id2.fcc_folder_picker_mode", 0);
lockPref("mail.identity.id2.stationery_folder", "imap://[email protected]/Templates");
// Все доступные для этого аккаунта адреса
lockPref("mail.account.account1.identities", "id1,id2");
// Адресная книга сотрудников
lockPref("ldap_2.servers.domain.uri", "ldap://dc.domain.com/OU=Пользователи,OU=domain,DC=DOMAIN,DC=COM??sub?(mail=*)");
lockPref("ldap_2.servers.domain.auth.dn", "DOMAIN\\malamut");
lockPref("ldap_2.servers.domain.auth.saslmech", "");
lockPref("ldap_2.servers.domain.description", "Сотрудники 'Рога и Копыта'");
lockPref("ldap_2.servers.domain.filename", "empl.mab");
lockPref("ldap_2.servers.domain.maxHits", 300);
// Автодополнение адресов из книги сотрудников
lockPref("ldap_2.autoComplete.directoryServer", "ldap_2.servers.domain");
lockPref("ldap_2.autoComplete.useDirectory", true);
// SMTP Яндекса для [email protected]
lockPref("mail.smtpserver.smtp50.hostname", "smtp.yandex.ru");
lockPref("mail.smtpserver.smtp50.port", 465);
lockPref("mail.smtpserver.smtp50.description", "SMTP для [email protected]");
lockPref("mail.smtpserver.smtp50.try_ssl", 3);
lockPref("mail.smtpserver.smtp50.auth_method", 1);
lockPref("mail.smtpserver.smtp50.username", "[email protected]");
// Добавляем SMTP Яндекса в список
var smtp = getPref("mail.smtpservers");
var smtp_s = smtp + ",";
if (! (smtp_s.indexOf("smtp50,")+1) ) {
smtp = smtp + ",smtp50";
}
pref("mail.smtpservers", smtp);
// IMAP Яндекса для [email protected]
lockPref("mail.server.server50.type", "imap");
lockPref("mail.server.server50.hostname", "imap.yandex.ru");
lockPref("mail.server.server50.realhostname", "imap.yandex.ru");
lockPref("mail.server.server50.port", 993);
lockPref("mail.server.server50.socketType", 3);
lockPref("mail.server.server50.name", "[email protected]");
lockPref("mail.server.server50.userName", "[email protected]");
lockPref("mail.server.server50.realuserName", "[email protected]");
lockPref("mail.server.server50.check_new_mail", true);
lockPref("mail.server.server50.login_at_startup", true);
lockPref("mail.server.server50.isSecure", true);
lockPref("mail.server.server50.max_cached_connections", 5);
// Аккаунт для [email protected]
defaultPref("mail.identity.id50.fullName", "yandex");
lockPref("mail.identity.id50.useremail", "[email protected]");
lockPref("mail.identity.id50.reply_to", "[email protected]");
lockPref("mail.identity.id50.valid", true);
lockPref("mail.identity.id50.smtpServer", "smtp50");
defaultPref("mail.identity.id50.organization", "");
lockPref("mail.account.account50.identities", "id50");
lockPref("mail.account.account50.server", "server50");
// Добавляем аккаунт [email protected] в список
accounts = getPref("mail.accountmanager.accounts");
accounts_s = accounts + ",";
if (! (accounts_s.indexOf("account50,")+1) ) {
accounts = accounts + ",account50";
}
pref("mail.accountmanager.accounts",accounts);
} catch(e) {
displayError("lockedPref", e);
}
Вот и всё, мы получили файл конфигурации для Thunderbird, сгенерированный Perl скриптом на сервере.
Самое великолепное в этом то, что с помощью описанного механизма можно неограниченно гибко управлять любыми настройками Thunderbird, включая настройки плагинов, которые также подчиняются менеджеру конфигурации. Единственное, что не подвластно такому централизованному конфигурированию — это пользовательский интерфейс, то есть расположение панелек и их размер.
Настройка аккаунтов через конфигурационный файл
Сначала, на всякий случай, рассмотрим основной принцип настроек аккаунтов в Thunderbird, поскольку он не совсем очевиден.
Все множественные данные одного типа Thunderbird нумерует и различает по номерам. Если нужно добавить новый аккаунт, почтовый адрес, SMTP сервер или ещё что, то Thunderbird во внутренних настройках присвоит новому объекту первый доступный номер. Поэтому когда вы добавляете какие-то объекты через скрипт автоконфигурации, то присваивайте номера, заведомо бОльшие, чем уже могут быть в клиенте. Иначе вы можете переписать случайно настройки какого-то пользовательского почтового ящика, что вряд ли понравится пользователю. Исключение — основной корпоративный аккаунт, который имеет номер 1.
Для того, чтобы привязать множественные записи к какому-то объекту, например, несколько почтовых адресов отправки к аккаунту, Thunderbird использует простые списки, разделённые запятой. Например:
lockPref("mail.account.account1.identities", "id1,id2");
Thunderbird поддерживает множественные аккаунты (account), кроме того, у каждого аккаунта может быть несколько почтовых идентификаторов (identity). Названия всех опций, относящихся непосредственно к аккаунту, начинаются с mail.account.accountN, где N — внутренний номер аккаунта. Названия всех опций, относящихся к почтовым идентификаторам, начинаются соответственно с mail.identity.idN, где N — внутренний номер идентификатора.
Список всех аккаунтов Thunderbird хранится в переменной mail.accountmanager.accounts. Кстати, порядок перечисления аккаунтов в этой переменной определяет порядок их следования в левой панели навигации пользовательского интерфейса Thunderbird. Если удалить аккаунт из этого списка, то он пропадёт из Thunderbird, даже не смотря на то, что все его настройки могут остаться на месте.
Список почтовых идентификаторов для аккаунта N указывается в переменной mail.account.accountN.identities. IMAP сервер привязывается к аккаунту с помощью переменной mail.account.accountN.server, SMTP же сервер привязывается к почтовому идентификатору с помощью переменной mail.identity.idN.smtpServer.
В общем, перед тем, как что-то настраивать, крайне рекомендуется разобраться в том, что от чего зависит и что с чем связано.
Полезные трюки для скрипта автоконфигурации
Во-первых, обратите внимание на JavaScript код, который добавляет переменные в список себе подобных. Например, вот так можно добавить аккаунт к уже существующим:
// Добавляем аккаунт в список уже подключённых аккаунтов, если его там ещё нет
var accounts = getPref("mail.accountmanager.accounts");
var accounts_s = accounts + ",";
if (! (accounts_s.indexOf("account1,")+1) ) {
accounts = accounts + ",account1";
}
pref("mail.accountmanager.accounts",accounts);
Этот трюк необходим для того, чтобы скрипт автоконфигурации не уничтожал настройки дополнительных аккаунтов, подключённых пользователем вручную. Именно поэтому нужный аккаунт нужно добавлять в список уже существующих, а не просто перезаписывать весь список.
Кроме того, на уровне Perl скрипта можно организовать какую угодно обработку в зависимости от переданного имени пользователя. Я добавил для примера функцию, которая подключает аккаунт с Yandex по его имени, и добавил вызов этой функции для себя. Теперь мне потребуется всего лишь закрыть Thunderbird и открыть его заново, затем ввести свой пароль и всё, мой Yandex аккаунт будет подключён! Такую технику очень удобно использовать для удалённого управления почтовыми клиентами отдельных пользователей.
Например, звонит вам босс какого-нибудь филиала и просит подключить аккаунт yandex своей тёщи. Вы, вместо того, чтобы высылать туда штатного специалиста, или долго объяснять, куда нажать, или отвлекать от работы и подключаться удалённо, просто добавляете три строчки в скрипт автоконфигурации и просите перезагрузить почтовый клиент и ввести свой пароль. Такой метод настройки также гарантирует, что пользователь ничего не сломает в параметрах, поскольку они все заблокированы.
Ну и наконец немаловажным является тот факт, что однажды заблокированные параметры прописываются в настройки локального клиента. То есть если вы поставите Thunderbird на ноубук шефа, подключите его в корпоративной сети с целью его автоматической конфигурации, а потом шеф с ним куда-то уедет, то его настройки в клиенте всё равно сохраняться. Даже не смотря на то, что сервер автоконфигурации не будет доступен из того места, где он будет подключаться к интернету.
Дополнительные возможности Thunderbird
Конфигурировать Thunderbird вы теперь умеете. Однако не забудьте на радостях, что Thunderbird выгодно отличается от всех других почтовых клиентов тем, что поддерживает расширения. И этих расширений доступно великое множество на все случаи жизни.
Например, для управления совместным доступом к почтовым ящикам с помощью IMAP ACL можно использовать соответствующее расширение. Для добавления календаря в Thunderbird отлично подойдёт Lightning, который, кстати, тоже можно очень гибко настроить через описанный выше механизм.
Для того, чтобы установить расширение для всех пользователей компьютера, можно сначала поставить его штатным способом, а потом скопировать соответствующую папочку из своего профиля в каталог extensions/, который можно найти в основном установочном каталоге Thunderbird.
Кроме того, можно создавать профили по умолчанию для новых пользователей. Для этого используется каталог default/profile. В профиль можно положить, например, файл настроек пользовательского интерфейса или файл с сертификатами.
Оригинал : habrahabr.ru/post/101905/
portsnap fetch update
cd /usr/ports/ftp/pure-ftpd make && make install && make clean
выбираем опции:
[X] MYSQL Support for users in MySQL database [X] PRIVSEP Enable privilege separation [X] PERUSERLIMITS Per-user concurrency limits [X] THROTTLING Bandwidth throttling [X] UPLOADSCRIPT Support uploadscript daemon [X] UTF8 Support for charset conversion [X] SENDFILE Support for the sendfile syscall [X] BANNER Show pure-ftpd welcome upon session start
У pure-ftpd (в нашем случае) конфига: pure-ftpd.conf и pureftpd-mysql.conf:
cd /usr/local/etc/ ls | grep pure pure-ftpd.conf.sample pureftpd-ldap.conf.sample pureftpd-mysql.conf.sample pureftpd-pgsql.conf.sample
С первым разберемся сами, а второй оставим UserManager. Копируем дефолтный конфиг:
cp pureftpd-mysql.conf.sample pureftpd-mysql.conf
Редактируем конфиги
Мой вариант конфига pure-ftpd.conf не сильно отличается от дефолтного:
less /usr/local/etc/pure-ftpd.conf ChrootEveryone yes BrokenClientsCompatibility yes MaxClientsNumber 50 Daemonize yes MaxClientsPerIP 8 VerboseLog no DisplayDotFiles yes AnonymousOnly no NoAnonymous no SyslogFacility ftp DontResolve yes MaxIdleTime 15 MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf LimitRecursion 10000 8 AnonymousCanCreateDirs no MaxLoad 4 AntiWarez yes AnonymousBandwidth 8 Umask 133:022 MinUID 100 AllowUserFXP no AllowAnonymousFXP no ProhibitDotFilesWrite no ProhibitDotFilesRead no AutoRename no AnonymousCantUpload yes MaxDiskUsage 90 CustomerProof yes IPV4Only yes
Для создания конфига pureftpd-mysql.conf нам пригодится UserManager. С его помощью мы сгенерируем конфиг для MySQL и будем управлять нашим FTP сервером через веб.
Переходим в нужную директорию портов и устанавливаем UserManager:
cd /usr/ports/www/usermanager make install clean
Нужно перенести скачанный «движок» в директорию веб-сервера:
mv /usr/local/www/data/UserManager/ /var/www/ftp/data
Виртуал хост для апача:
ServerAdmin [email protected] DocumentRoot /var/www/ftp/data ServerName ftp.rublin.org Alias /php-fcgi/ /var/www/ftp/cgi-bin/ CustomLog /var/log/httpd/httpd-access.log combined ErrorLog /var/log/httpd/httpd-error.log
Обязательно в php.ini включаем опцию:
short_open_tag = On
Дополнительно скачиваем русский интерфейс с оффсайта:
fetch http://machiel.generaal.net/files/pureftpd/languages/2.x/russian.php.txt mv russian.php.txt /var/www/ftp/data/language/russian.php
Теперь в браузере открываем http://ftp.***/install.php и настраиваем UserManager.
Если на третьем шаге получаем ошибку:
Checking connection to MySQL server OK! Create user FTP OK! Create database ftpusers OK! Create table admin Failed! Create table users Failed!
То придется базу создавать вручную. Для этого подсмотрим в файл script.mysql:
less /var/www/ftp/data/extra/script.mysql
Логинимся в MySQL и выполняем действия со скрипта:
mysql -uroot -p
Создаем пользователя для базы:
CREATE USER 'ftp'@'localhost' IDENTIFIED BY 'tmppasswd';
Создаем базу и назначаем на нее права пользователю:
FLUSH PRIVILEGES; CREATE DATABASE ftpusers; GRANT ALL ON ftpusers.* TO 'ftp'@'localhost';
Создаем таблицу администраторов и добавляем админа:
USE ftpusers;
CREATE TABLE admin ( Username varchar(35) NOT NULL default '', Password char(32) binary NOT NULL default '', PRIMARY KEY (Username) ) ENGINE=MyISAM;
INSERT INTO admin VALUES ('Administrator',MD5('tmppasswd'));
Создаем таблицу пользователей и добавляем пользователя:
CREATE TABLE `users` (
`User` varchar(16) NOT NULL default '',
`Password` varchar(32) binary NOT NULL default '',
`Uid` int(11) NOT NULL default '14',
`Gid` int(11) NOT NULL default '5',
`Dir` varchar(128) NOT NULL default '',
`QuotaFiles` int(10) NOT NULL default '500',
`QuotaSize` int(10) NOT NULL default '30',
`ULBandwidth` int(10) NOT NULL default '80',
`DLBandwidth` int(10) NOT NULL default '80',
`Ipaddress` varchar(15) NOT NULL default '*',
`Comment` tinytext,
`Status` enum('0','1') NOT NULL default '1',
`ULRatio` smallint(5) NOT NULL default '1',
`DLRatio` smallint(5) NOT NULL default '1',
PRIMARY KEY (`User`),
UNIQUE KEY `User` (`User`)
) ENGINE=MyISAM;
INSERT INTO ftpusers.users VALUES ('ftpuser_1',MD5('tmppasswd'),65534, 31, '/usr', 100, 50, 75, 75, '*', 'Ftp user (for example)', '1', 0, 0);
После этого заканчиваем в веб-интерфейсе инсталяцию.
Добавляем параметры запуска в rc.conf и запускаем вручную:
echo 'pureftpd_enable="YES"' >> /etc/rc.conf /usr/local/etc/rc.d/pure-ftpd start Starting pureftpd. Running: /usr/local/sbin/pure-ftpd -g/var/run/pure-ftpd.pid -A -b -c50 -B -C8 -D -fftp -H -I15 -lmysql:/usr/local/etc/pureftpd-mysql.conf -L10000:8 -m4 -s -t8 -U133:022 -u100 -i -k90 -Z -4
Проверяем, что сокет запущен:
sockstat | grep pure root pure-ftpd 62460 3 dgram -> /var/run/logpriv root pure-ftpd 62460 4 tcp4 *:21 *:*
Оригинал :rublin.org/content/nastroyka-ftp-pure-ftpd-usermanager-na-freebsd
Для добавлении сервиса в автозагрузку, сущеcтвует служба chkconfig.
Синтаксис службы:
chkconfig --list имя службы |
chkconfig --add имя службы |
chkconfig --del имя службы |
chkconfig [--level levels] имя службы |
chkconfig [--level levels] имя службы |
Примеры использования:
проверяем включен ли в автозагрузку httpd:
chkconfig --list httpd |
httpd 0:выкл 1:выкл 2:выкл 3:выкл 4:выкл 5:выкл 6:выкл |
включаем на уровень исполнения 3,5 и проверяем:
chkconfig --level 35 httpd on |
chkconfig --list httpd |
httpd 0:выкл 1:выкл 2:выкл 3:вкл 4:выкл 5:вкл 6:выкл |
выключаем службу:
chkconfig --level 35 httpd off |
удаляем службу:
chkconfig --del httpd |
добавляем службу в автозагрузку:
chkconfig --add httpd |
выключаем службу на всех уровнях:
chkconfig httpd off |
включаем службу на всех уровнях:
chkconfig httpd on |
Графические утилиты
1. system-config-services
2. ntsysv
ntsysv --level 35 |
Редактируем все уровени:
ntsysv |
Уровни выполнения:
Уровень 0 — остановка системы (halt) — работа системы должна быть прекращена;
Уровень 1 — однопользовательский режим работы — система инициализирует минимум служб и даёт единственному пользователю (как правило, суперпользователю) без проведения аутентификации командную строку. Как правило, этот режим используется для восстановления системы;
Уровень 2 — многопользовательский режим — пользователи могут работать на разных терминалах, вход в систему с процессом аутентификации;
Уровень 3 — многопользовательский сетевой режим — в отличие от предыдущего уровня, осуществляется настройка сети и запускаются различные сетевые службы;
Уровень 4 — не имеет стандартного толкования и практически не используется;
Уровень 5 — запуск графической подсистемы — по сравнению с уровнем 3 производится также старт графической подсистемы X11, и вход в систему осуществляется уже в графическом режиме;
Уровень 6 — перезагрузка системы — при включении этого режима останавливаются все запущенные программы и производится перезагрузка.
Управление службами:
Запуск
service httpd start |
или
/etc/init.d/httpd start |
Остановка
/etc/init.d/httpd stop |
Перезапуск
service httpd restart |
или
/etc/init.d/httpd restart
Оригинал : xaxatyxa.ru/_centos/avtozapusk-servisov-centos-rhel.html