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#"}