Архив автора: fil

Подключение Grandstream к Asterisk

В данной статье пойдет речь о модели Grandstream GXW4024.
Недавно начал изучать Asterisk. Думал с самого так сказать начала описывать процесс изучения данной программной АТС, но почитав книгу «Asterisk: будущее телефонии«, пришел к выводу что в этой книге выдана исчерпывающая информация для новичка по данной теме.

И так, требуется подключить Grandstream к Asterisk. Что ж, заходим на данное оборудование по его IP, вводим пароль, для тех кто не в курсе — по дефолту пароль admin. Переходим на вкладку Profile1, забиваем IP адрес нашего SIP сервера.
050320151022
Больше нас тут ни чего не интересует.
Теперь требуется настроть FXS порты. Переходим во вкладку FXS ports. Задаем на интересующей нас линии ID абонента и его пароль, выставляем Profile1 (мы же его настраивали).
050320151029

Теперь переходим к настройке Asterisk. Открываем на редактирование файл Sip.conf и добавляем следующие строки.

[4024]
host=dynamic
dtmfmode=rfc2833
secret=password
type=friend
disallow=all
allow=gsm                      
allow=ulaw
qualify=yes
context=phones
insecure=port

Сохраняем файл.
Пере запускаем в Asterisk конфигурацию SIP

root@AsteriskSrv:/etc/asterisk# asterisk -rcvv
AsteriskSrv*CLI> sip reload
 Reloading SIP

Если ошибок не выдало, то все ок. А вот как позвонить на данный телефон это уже другой вопрос)

Outlook добавляет письма в нежелательную.

Бывают ситуации что желательная почта по желанию outlook попадает в нежелательную. Данное решение предлагается для обладателям Exchange.

Предположим ситуацию что письмо от адресата petrov@example.com попадает в папку «нежелательная почта» пользователя sidorov, исправляем:

Get-mailbox -Identity "sidorov" | Set-MailboxJunkEmailConfiguration -TrustedSendersAndDomains @{Add="petrov@example.com"}

А если нам надо разрешить прохождения писем от целого домена example.com

Get-mailbox -Identity "sidorov" | Set-MailboxJunkEmailConfiguration -TrustedSendersAndDomains @{Add="example.com"}

Так же есть и внутренний доменные адреса которые к верхними правилам не могут применяться, по этому тут нужно идти по другому пути:

Set-ContentFilterConfig  -BypassedSenderDomains @{Add="blueyonderairlines.com"}

Проверка

Get-ContentFilterConfig | Format-List Bypassed*

Ссылки по теме.

https://technet.microsoft.com/ru-ru/library/aa995953(v=exchg.150).aspx

https://technet.microsoft.com/ru-RU/library/dd979780(v=exchg.150).aspx

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

Доброго дня всем.
Второй раз уже натыкаюсь на данную проблему, а следовательно это уже закономерность. Данная проблема возникает на серверах HP Proliant. Опишу её. После установки Hyper-V R2 Core и запуска на нем виртуальных машин, через некоторое время начинается падение скорости на сетевых интерфейсах виртуальных машин. Причем скорость передачи данных между гипервизором и локальным хостом в сети — нормальная. А если осуществлять сетевой обмен между хостом в сети и виртуальной машиной то скорость не привышает 1мб/с. В чем же спросите вы проблема? А она заключается как всегда в «хотели сделать как лучше» — Microsoft в своем новом продукте внедрили технологию VMQ, призванную разгрузить Hyper-V, но увы наверное не все сетевые интерфейсы поддерживают данную технологию (на CISCO с210 сервере я данную проблему не словил).
Решение. Для начала проверил включен ли данный режим на наших сетевых интерфейсах с помощью команды Get-NetAdapterVMQ :

PS C:\Users\Administrator> Get-NetAdapterVMQ

Name                           InterfaceDescription              Enabled BaseVm
                                                                         qProce
                                                                         ssor
----                           --------------------              ------- ------
user_net                       Microsoft Network Adapter Mult... True    0:0
Ethernet 5                     Broadcom NetXtreme Gigabit E...#4 False   0:0
Ethernet 2                     Broadcom NetXtreme Gigabit Eth... False   0:0
Ethernet 3                     Broadcom NetXtreme Gigabit E...#2 True    0:0
Ethernet 4                     Broadcom NetXtreme Gigabit E...#3 True    0:0

Как видим данный режим на интересующем нам интерфейсе user_net включен.
Отключим его на всех интерфейсах:

Get-NetAdapter|Disable-NetAdapterVMQ

Возможно даже система будет ругаться что мол не могу и все такое. Но в итоге должно все отработать ровно.
Проверяем:

PS C:\Users\Administrator> Get-NetAdapterVMQ

Name                           InterfaceDescription              Enabled BaseVm
                                                                         qProce
                                                                         ssor
----                           --------------------              ------- ------
user_net                       Microsoft Network Adapter Mult... False   0:0
Ethernet 5                     Broadcom NetXtreme Gigabit E...#4 False   0:0
Ethernet 2                     Broadcom NetXtreme Gigabit Eth... False   0:0
Ethernet 3                     Broadcom NetXtreme Gigabit E...#2 False   0:0
Ethernet 4                     Broadcom NetXtreme Gigabit E...#3 False   0:0

Как видим теперь на всех интерфейсах режим VMQ отключен.
Теперь можно проверить и скорость передачи данных по сети у виртуальных машин. У меня стало все ОК работать, а у вас?

Delphi. Получение PID дочернего процесса.

Пишем на Delphi.
Потребовалось найти PPID. Т.е. PID потомка процесса порождающего его.

//******************************************************************************
//функция получает ПИД дочернего процесса , передается ПИД процесса родителя
//******************************************************************************
function Get_PIDchild_process(PIDparent:Cardinal):Cardinal;
var
  HandleSnapShot      : THandle;
  EntryParentProc     : TProcessEntry32;
  fnd: boolean;
begin
result := 0;    //если процесс не существует
HandleSnapShot     := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//делаем снапшот процессов или чего там (короче диспетчера задач)
EntryParentProc.dwSize := SizeOf(EntryParentProc);     //я так понимаю создаем структуру , этакий шаблон , для получения данных
fnd := Process32First(HandleSnapShot, EntryParentProc); // Находим первый процесс. передавая снапшота в структуру данных
while fnd do // Цыкл перебора всех процессов в системе (снапшоте).
  begin
  if (EntryParentProc.th32ParentProcessID = PIDparent) then   //если найден процеесс у которого родитель его то
    begin
    fnd := false; //заканчиваем цыкл
    result := EntryParentProc.th32ProcessID;  //возвращааем PID процесса потомка
    ShowMessage(inttostr(PIDparent)+'   '+inttostr(EntryParentProc.th32ProcessID)+'   '+EntryParentProc.szExeFile);
    end;
  fnd := Process32Next(HandleSnapShot, EntryParentProc);  // Схожий процесс не найден, продолжаем перебор
  end;
CloseHandle(HandleSnapShot);  // Закрываем наш снепшот.
end;

Прокомментирую, в кратце.
Делаем «снапшот» всех процессов в системе. Создаем структур (массив) — в которую будем передавать снапшот, а дальше просто цыклом перебираем. И тем самым находим по PID родителя PID потока.

postfix + DKIM + SPF + DMARC

Доброго дня.
Сервер, а точнее IP сервера попал в бан google. И надо что-то предпринимать, т.к. потдержка корпорации добра не стримится помоч тем кто им не платит, пробуем решить данную проблему своими силами. И одно из таких решений это подтверждение кашерности письма по средсвам DKIM.
Этот пост я честно списал с других ресурсов, чисто для себя, чтобы не искать в следующий раз и не вспоминать что да как было.
Оригинал взят с этих статей: статья 1, статья 2.

И так начнем устанавливаем OpenDKIM

aptitude install opendkim opendkim-tools

Создадим дирректорю для наших будущих ключей

mkdir /etc/postfix/dkim/

Теперь надо генерировать ключи «открытый» и «закрытый».

opendkim-genkey -D /etc/postfix/dkim/ -d example.com -s example

вот тут один момент, в описании говорится что -d -это домен, а -s — селектор. Селектор — это приставка что ли, по которой будет потом искаться ключ в DNS, потом покажу.
И так создались два файла example.private и example.txt.
Сразу возьмем и добавим из файла example.txt хэш код на сервер DNS — обращаю ваше внимание что нам нужно только та информация, которая включена в двойные кавычки (кавычки не копируем).
И в этом же файле наблюдаем такую запись example._domainkey — вот это и есть селектор (без ._domainkey), это буде TXT запись на нашем DNS сервере. Примерно должно получиться следующая запись в DNS
281020141236
Файлам ключей обязательно нужно дать доступ для группы, в которой работает OpenDKIM:

chgrp opendkim /etc/postfix/dkim/*
chmod g+r /etc/postfix/dkim/*

В файл конфигурации /etc/opendkim.conf записываем:

Syslog yes
SyslogSuccess yes
# на время отладки включим расширенное логгирование
LogWhy yes
X-Header yes

Canonicalization relaxed/relaxed
# подпись и проверка подписей
Mode sv
# если только подписываем
#Mode s

# список ключей -
KeyTable file:/etc/postfix/dkim/keytable
# соответствие адресов/доменов и ключей -
SigningTable file:/etc/postfix/dkim/signingtable
# если вы подписываете и на других серверах -
#ExternalIgnoreList file:/etc/postfix/dkim/trusted
# список внутренних хостов, почта которых требует подписи -
#InternalHosts file:/etc/postfix/dkim/internal

Список имеющихся ключей укажем в файле /etc/postfix/dkim/keytable:

# формат: "название домен:селектор:/путь/до/ключа"
# в качестве названия удобно использовать имя DNS записи с ключем
mail.example.com example.com:example:/etc/postfix/dkim/example.private
# ключей может быть сколько угодно
#mx._domainkey.example.net example.net:mx:/etc/postfix/dkim/mx.private
# (список ключей может быть и в БД - продробней в манах)

Объясним OpenDKIM почту каких доменов какими ключами подписывать в файле /etc/postfix/dkim/signingtable:

# формат: "домен-или-адрес название-ключа"
example.com mail.example.com
#example.net mx._domainkey.example.net
# все остальные адреса тоже подписываем
#* mail.example.com
# (подробное описание формат есть в man)

В других файлах, указаных в директивах ExternalIgnoreList и InternalHosts, содержится просто список хостов и/или IP-адресов каждый на новой строке.

В файле /etc/default/opendkim объясним DKIM-демону где ему ждать подключений:

SOCKET="inet:8891@localhost"

Наконец, добавим в конец /etc/postfix/main.cf следующие строки:

milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Я добавил еще вот такую запись в DNS

_domainkey.example.com.    TXT     "t=s; o=~;"

Перезапускаем postfix

service postfix restart

Перезапускаем opendkim

service opendkim restart

Проверить отрабатывает или нет ваш DKIM (там же и SPF) можно отослав тестовое письмо на адрес check-auth@verifier.port25.com в ответ придет письмо с развернутым ответом что да как 🙂

Теперь поговорим об SPF
Настраивается еще проще чем DKIM. Нужно просто в DNS добавить запись типа TXT/SPF

v=spf1 ip4:151.236.219.215 ip6:2a01:7e00::f03c:91ff:feae:4fa1 a ~all

где указывается IP вашего домена. Причем запись вешается прям на сам домен.
Немного про SPF

Ну и последнее — DMARC
Немного о DMARC.
Говорят их очень любит Google, что же не будем его обижать, добавим запись вида

_dmarc.example.ru   3600    IN  TXT "v=DMARC1; p=none; rua=mailto: postm@example.ru "

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

Перенос wss (SharePoint) с 2003 server sp2 (SBS) на 2008 r2

Доброго дня.
Сегодня попробую рассказать как перенести портал sharePoint c 2003 го сервера на 2008-ой.
И так приступим. Сначала бэкапим старый портал. Для этого зайдем в Центр администрирования Перейдем в Операции -> Выполнение резервного копирования.
251020141132
Далее Шаг 1, выбираем ВСЕ. и продолжаем нажатием на Параметры резервного копирования.
251020141137
Шаг 2. Тут следует выбрать Ферма и тип резервного копирования полное. Немного на счет местоположения, я пробовал сохранять на расшареную папку, с полными правами, но все равно получал ошибки, поэтому я решил использовать доп. винчестер и делать бэкап на него.
251020141142
После окончания резервного копирования, состояние отчета о ходе выполнения должно выглядеть как на изображении , без ошибок 🙂
251020141149

И так у нас есть копия портала. Теперь следует подготовить новый сервер для данного обновления.
Для начал добавляем сервер в домен. (у меня домен поэтому и добавляю)
— имя сервера WSS
Далее требуется установить SQL Server 2008 r2 standart
— название экземпляра я поставил тоже WSS
— Режим проверки подлинности смешанный
— Настройка служб Reporting Service: Установить конфигурацию по умолчанию для работы в SharePoint

После установки SQL сервера требуется поставить еще одно обновление, WSS 3.0 — данный дистрибутив можно скачать с сайта Майкрософт.
Установка WSS 3.0:
— выбираем тип установки Расширенная
— Далее выбираем Веб-интерфейс
После запускаем мастер настройки WSS 3.0.
— Нет, создать новую ферму SharePoint
— Вводим параметры нашей новой фермы. WSS\WSS — имя сервера и имя экземпляра (я писал выше). Имя базы WSS — ну просто так решил назвать. Учетные данные, тут данные либо доменного администратора, либо локального администратора БД.
251020141253
Номер порта можно указать, а можно не указывать (я указываю).
Проверка подлинности NTML
Ждем когда завершиться процесс создания БД.

По завершению система нам откроет узел центра администрирования созданного портала.
Т.к. у меня плохо получается дружба с расшареными папками для бэкапирования и восстановления, я скопирую папку с копией портала на новый сервер.
Советую отключить у IE Конфигурацию усиленной безопасности — открываем диспетчер сервера -> выбираем «корень» диспетчер сервера -> справа внизу выбираем пункт Настроить конфигурацию усиленной безопасности Inteernet Explorer.

И так мы в центре администрирования SharePoint, переходим в операции , далее восстановление из резервной копии.
Указываем местоположение резервной копии
251020141328
Выбираем нужную нам копию, и жмем Продолжить востановление
251020141330
Так же выбираем ВСЕ пункты компонент восстановления. И жмем продолжить восстановление.
251020141333
Следующий шаг довольно сложный.
— Новая конфигурация
— Указываем URL-адрес нового веб-приложения желательно с портом
— Имя нового сервера баз данных WSS\WSS
— Имя нового каталога, надо чтобы каталог существовал.
— Имя новой базы данных можно не изменять (но лучше изменить)
251020141431
Если будут возникать ошибки во время восстановления, то придется довольно часто прерывать операцию Операции -> Операции задания таймера -> Резервное копирование или восстановление -> Удалить

После восстановления можно проверить зайдя по адресу и порту у меня это http://wss:8033/
Если работает, то было бы не плохо сменить порт на 80ый. Для этого надо зайти в диспетчер IIS. Сайты -> WSS -> Действия/Привязки и изменяем на 80 порт. Так же было бы не плохо сменить порт для дефолтного сайта IIS, на какой нибудь другой.

Все, мы рассмотрели перенос SharePoint с windows server 2003 на server 2008 r2/

Exchange 2010 обновление адресной книги в Outlook или куда подевался сотрудник?

Доброго дня.
Бывает такая ситуация, когда пропадает запись о сотруднике (у меня пропала группа, но это не важно) из адресной книги. И вот как решить такую задачу, опишем в этом посте.
Для начала посмотрим аттрибуты объекта в AD. Аттрибут в AD должен называться showInAddressBook. Кто невкурсе — в mmc -> View -> Detail ADattr
Этот аттрибут говорит нам в какой адресной кнге должен присудствовать этот пользователь/группа. Последнего параметра у меня небыло, я его скопировал из другой группы, которая нормально отображатеся в адресной книге.
На этом проверка в AD Заканчивается. Приступаем к работе с Exchange.
В Exchange будем пользоваться EMS. И первая команда — это обновление глобального списка адресов (GAL). Все (ну почти все) что относится к почте в AD сначало попадает в GAL.

Get-GlobalAddressList | Update-GlobalAddressList

Далее вторым по списку идет обновление offline Adrress Book (OAB) — сюда данные попадают из GAL

Get-OfflineAddressbook | Update-OfflineAddressbook

Заключительный шаг — получение всех клиентов и рассылка им обновленной OAB, тип кстати можно не указывать

Get-ClientAccessServer | Update-FileDistributionService -Type "OAB"

Теперь на клиенте, следует обновить адресную книгу или загрузить ее по новой.

pfsense + squid + LDAP + AD

Попытаюсь рассказать как я решил проблему установки и настройки pfsense на Hyper-V 2012, а так же организовать аутентификацию через LDAP для разграничения прав доступа к сайтам по группам из AD. Используем pfsense 2.1.4-RELEASE (amd64) built on Fri Jun 20 12:59:50 EDT 2014. Из трудностей которые возникли это то что pfsense после установки не хотел видеть виртуальные интерфейсы, которые использует Hyper-V Core 2012 по умолчанию. Решение данного вопроса — поставить «устаревшие виртуальные интерфейсы», но они не поддерживают VLAN, зато pfsens их видит. На этом неприятности с интерфейсами не заканчиваются. ОС pfsense видит сетевые интерфейсы (de0 и de1), но трафик через них не ходит. Это какой то баг не совместимости. Для решения — просто выключаем/включаем интерфейсы из консоли pfsenseifconfig de0 down|up. После этого интерфейсы начинают работать. Далее из пакетов ставим squid 2. Нам надо настроить авторизацию пользователей через LDAP: в принципе как это сделать написано на каждом заборе, но тут тоже есть свои нюансы. 260920161109 Нюанс заключается вот в чем, для поиска пользователей в разных контейнерах требуется рекурсивный запрос. Для этого надо выставить ключ ‘-R’. Некоторые предлагают подправить конфиг pfsense. Я же придерживаюсь более консервативных взглядов «не лезть внутрь без надобности». По этому предлагаю вам выставить данный ключ после имени доменного пользователя как на скриншоте.
Немного о параметрах:
LDAP server user DN — тут нужен самый простой пользователь, он имеет право на чтение AD.
LDAP base domain — тут указывается домен «dc=domain,dc=local»
LDAP username DN attribute — этот параметр соответствует атрибуту в AD. Обычно там полностью ФИО пользователя. Смутно представляю для чего нужен этот параметр.
LDAP search filter — sAMAccountName тоже атрибут AD, в него передается параметр ‘%s’ в котором лежит логин пользователя.
Вконце концов чтобы отладить все свои параметры, потребуется отладка через shell. Должно получиться примерно вот что:

1
2
3
 /usr/pbi/squid-amd64/libexec/squid/squid_ldap_auth -v 3 -b "dc=terra,dc=local" -D test1@terra.local -R -w p@ssw0rd -f "sAMAccountName=%s" -u cn -P 192.168.100.201:389
test2 p@ssw0rd2
OK

Второй строчкой вводится логин и пароль пользователя, при правильных действиях должны получить значение ОК.
Ну вот вроде теперь пользователи могут авторизоваться на сервере squid и можно вести логирование трафика по доменному имени пользователя. Но есть следующая задача, ограничить некоторых пользователей в доступе к внешним ресурсам. Для этого нам понадобиться перейти на вкладку General. И в поле ввода Custom Options вводим параметры, первая строка:

external_acl_type myextgroup1 ttl=12 %LOGIN /usr/local/libexec/squid/squid_ldap_group -R -d -b "dc=terra,dc=local" -f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,OU=Users,OU=MyBusiness,DC=terra,DC=local))" -D squid@terra.local -K -w p@ssw0rd 192.168.100.201

external_acl_type — указывает squid’у что будет использоваться внешний acl
myextgroup1 — название расширенной acl
objectclass=user — мы же ищем пользователя? (атрибут AD)
sAMAccountName=%v — В параметр %v передается логин из %LOGIN (атрибут AD)
memberOf=cn=%a — В параметр %a передается название группы
ttl=12 — новый пользователь в группе, по умолчанию может начинать работать через 3600 секунд (1 час), делаем что через 12 секунд
-K — «обрезает» часть имени @domain и позволяет корректно сравнивать имя пользователя и группу.
Еще один момент, пользователь squid@terra.local должен обладать большими правами, чем обычный пользователь, для чтения групп, паролей.
Задаем acl который будет передавать название группы в переменную %a.Вторая строка:

acl mygroup1 external myextgroup1 AllowAllInet

AllowAllInet — название группы AD
myextgroup1 — название расширенной группы
mygroup1 — простая группа с которой будет работать squid
Создаем acl с социальынми сетями:

acl socialnet dstdomain vk.com odnoklassniki.ru facebook.com facebook.ru

Ну и теперь запрещаем нашей группе выход в соц. сети:

http_access deny mygroup1 socialnet

Ну вот и все. Как сделать еще две группы? … написать эти же правила еще ДВА раза.

Ссылки достойные внимания по этому вопросу:
http://www.k-max.name/linux/squid-auth-kerberos-ldap-grupp-active-directory/
http://www.thin.kiev.ua/router-os/50-pfsense/537-pfsense-20squid-ldap-ad-.html

Очистка корзины через командную строку (cmd, powershel)

В Hyper-V Core где нет GUI интерфейса, потребовалось очистить «корзину» с удаленными файлами.

Создадим bat файл и вводим туда код:

@ECHO OFF
start /b /wait powershell.exe -command "$Shell = New-Object -ComObject Shell.Application;$RecycleBin = $Shell.Namespace(0xA);$RecycleBin.Items() | foreach{Remove-Item $_.Path -Recurse -Confirm:$false}"

Как выставить в календарях у всех пользоватлей Exchange 2010 одинаковый шаблон?

Есть задача, выставить у всех пользователей Exchange 2010 в календарях одинаковые праздничные дни и может быть какие то заметки.
Сначала открываем EMC. И через нее даем права на импорт и экспорт *.pst файлов пользователю

ManagementRoleAssignment -Role "Mailbox Import Export" - User user@domen

Нужно создать нового тестового пользователя (test1) на почтовом сервере. Он нам нужен для того чтобы в его чистом календаре выставить нужные нам отметки и даты. Когда мы это сделали, то следует приступить к выгрузки календаря пользователя test1:

New-MailboxExportRequest -Mailbox test1 -FilePath C:\filename.pst -IncludeFolders "#Calendar#"

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

Get-Mailbox | select alias, whencreated | Export-CSV -Path "C:\AliasFile.csv" -NoTypeInformation -Delimiter ";"

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

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

Import-CSV -Path "C:\AliasFile.csv" -Delimiter ";" | foreach-object {New_MailboxImportRequest -Mailbox $_.Alias -FilePath C:\filename.pst -IncludeFolders "#Calendar#"}