Uncategorized

Update ClamAV through TOR

/opt/zimbra/common/etc/freshclam.conf

HTTPProxyServer 192.168.97.8
HTTPProxyPort 8123

root crontab

[root@zmail etc]# crontab -l
20 7,17 * * * su - zimbra -c "freshclam && zmfreshclamctl restart" > /dev/null 2>&1

Использование ipset во встроенном брандмауэре CentOS 7

Использование ipset во встроенном брандмауэре CentOS 7

ВТ 08 МАЯ 18 ADMIN2 КОММЕНТАРИЯ

Эта статья навеяна выполнением работ для одного из наших крупных клиентов ООО «ЕвроСтудио».

Известно, что в CentOS 7 было много нововведений. Одно из них — firewalld, демон-надстройка над iptables, добавляющая определенные удобства в работе с брандмауэром. Можно долго спорить на тему удобно/неудобно, и о том, что надстройка эта по умолчанию ставится только в разработках RedHat и совместимых с ними CentOS, но она есть, установлена, а значит почему бы ее не использовать?

Итак, IPset. Это именованные списки IP-адресов и подсетей, которые можно использовать в правилах iptables для уменьшения количества этих правил. Чем меньше правил — тем быстрее они анализируются, тем производительнее сеть на данном сервере. Поддержка IPset появилась в firewalld начиная с версии 0.4.0.

Смотрим версию firewalld
firewall-cmd -v
0.3.9

Видим, что версия ниже, чем 0.4.0, значит ее надо обновить
yum install firewall

Снова проверяем версию firewall
firewall-cmd -V
0.4.4.4

Если версия правильная, (>= 0.4.0, как у нас) можно работать с IPset. Например добавим список адресов
firewall-cmd --permanent --new-ipset=IP-whitelist --type=hash:ip

Если в списке должны быть и адреса, и подсети, то список следует добавлять так
firewall-cmd --permanent --new-ipset=IP-whitelist --type=hash:net

Мы добавили именованный список IP-whitelist. Опция «—permanent» добавляет конфигурационный файл этого списка, без нее после перезагрузки списка у нас не будет. А еще она сохраняет правила, списки и адреса в различные конфигурационные файлы .xml в директории /etc/firewalld, чтобы они автоматически применялись при перезагрузке сервера. Если нужно просто протестировать список или правило, опцию «—permanent» добавлять не нужно, правило или список в этом случае сохранится только до ближайшей перезагрузки.

Теперь будем добавлять в список адресов собственно адреса
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.1.4 --permanent
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.1.6 --permanent
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.1.8 --permanent

И подсети
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.2.0/24 --permanent
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.1.100/28 --permanent

Перезагрузим настройки firewall
firewall-cmd --reload

Посмотрим, какие у нас есть списки адресов/сетей
Показать существующие списки адресов
firewall-cmd --get-ipsets
IP-whitelist

Показать сам список
firewall-cmd --ipset=IP-whitelist --get-entries
192.168.1.4
192.168.1.6
192.168.1.8
192.168.2.0/24
192.168.1.100/28

Список у нас есть, можем теперь добавить правила, работающие с этими списками.
Допустим, нам надо, чтобы сервис ssh был доступен только для белого списка адресов IP-whitelist, а порты 80 и 443 были закрыты для адресов в списке IP-blacklist

Добавим правило, разрешающее сервис ssh для белого списка «IP-whitelist»
firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="IP-whitelist" service name="ssh" accept'

Если есть правило, разрешающее сервис ssh для всех, удалим его
firewall-cmd --permanent --zone=public --remove-service=ssh

Убедились, что ваш адрес есть в белом списке, иначе доступ к серверу будет закрыт!
firewall-cmd --ipset=IP-whitelist --get-entries

Перезагрузим настройки firewall
firewall-cmd --reload

Теперь создадим список IP-blacklist, добавим туда адреса
firewall-cmd --permanent --new-ipset=IP-blacklist --type=hash:net
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.1.5 --permanent
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.1.7 --permanent
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.3.0/24 --permanent
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.4.0/23 --permanent

Проверим, если хотим
firewall-cmd --get-ipsets
IP-whitelist
IP-blacklist

firewall-cmd --ipset=IP-whitelist --get-entries
192.168.1.5
192.168.1.7
192.168.3.0/24
192.168.4.0/23

И запретим доступ с этих адресов для портов 80 и 443 используя опцию service
firewall-cmd --add-rich-rule='rule source ipset=IP-blacklist service name="http" drop' --permanent
firewall-cmd --add-rich-rule='rule source ipset=IP-blacklist service name="https" drop' --permanent

Или опцию port
firewall-cmd --add-rich-rule='rule source ipset=IP-blacklist port protocol="tcp" port="80" drop' --permanent
firewall-cmd --add-rich-rule='rule source ipset=IP-blacklist port protocol="tcp" port="80" drop' --permanent

Перезагружаем настройки firewall
firewall-cmd --reload

Правила добавлены, блокировка включена, к ssh имеют доступ только разрешенные хосты. Теперь во время работы сервера мы можем добавлять и убирать адреса в эти списки
Добавление адреса в списки
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.1.20 --permanent
firewall-cmd --ipset=IP-blacklist --add-entry=192.168.1.70 --permanent
firewall-cmd --ipset=IP-whitelist --add-entry=192.168.1.80 --permanent
firewall-cmd --reload

COUNTRIES=('ru' 'kz')

ipset flush countries

for i in "${COUNTRIES[@]}"; do
    echo "Ban IP of country ${i}"

    for IP in $(wget -O - https://www.ipdeny.com/ipblocks/data/countries/${i}.zone)
    do
        #ipset add allowcountries $IP,22
        firewall-cmd --ipset=IP-whitelistnet --add-entry=$IP --permanent
    done
done

Exchange 2016 OWA HTTP ERROR 500

Accessing Exchange Server 2019 /OWA and /ECP throws the errors: “Status code: 500” and “Could not load file or assembly ‘Microsoft.Exchange.Common, Version=15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies.”

Problem

You’ve noticed that after patching Exchange Server 2019 servers (for this example, the patch for HAFNIUM was applied), access to /OWA and /ECP now displays the following errors:

OWA

🙁

Something went wrong

Your request couldn’t be completed. HTTP Status code: 500.

X-ClientId: F8E662D41996402E8660EEEB0976EA50

request-id a5077939-13bd-4032-9471-d6c8dc221d5a

X-OWA-Error System.Web.HttpUnhandledException

X-OWA-Version 15.2.721.13

X-FEServer Exch01

X-BEServer Exch02

Date:3/8/2021 12:31:53 PM

InnerException: System.IO.DirectoryNotFoundException

Fewer details…

Refresh the page

ECP

Server Error in ‘/ecp’ Application.

_______________________________________

Could not load file or assembly ‘Microsoft.Exchange.Common, Version=15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.FileNotFoundException: Could not load file or assembly ‘Microsoft.Exchange.Common, Version=15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Assembly Load Trace: The following information can be helpful to determine why the assembly ‘Microsoft.Exchange.Common, Version=15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ could not be loaded.

WRN: Assembly binding logging is turned OFF.

To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.

Note: There is some performance penalty associated with assembly bind failure logging.

To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

Stack Trace:

[FileNotFoundException: Could not load file or assembly ‘Microsoft.Exchange.Common, Version=15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.]

System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type) +0

System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName) +96

System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +65

System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase) +62

System.Web.Configuration.ConfigUtil.GetType(String typeName, String propertyName, ConfigurationElement configElement, XmlNode node, Boolean checkAptcaBit, Boolean ignoreCase) +50

[ConfigurationErrorsException: Could not load file or assembly ‘Microsoft.Exchange.Common, Version=15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.]

System.Web.Configuration.ConfigUtil.GetType(String typeName, String propertyName, ConfigurationElement configElement, XmlNode node, Boolean checkAptcaBit, Boolean ignoreCase) +572

System.Web.Configuration.ConfigUtil.GetType(String typeName, String propertyName, ConfigurationElement configElement, Boolean checkAptcaBit) +31

System.Web.Configuration.Common.ModulesEntry.SecureGetType(String typeName, String propertyName, ConfigurationElement configElement) +59

System.Web.Configuration.Common.ModulesEntry..ctor(String name, String typeName, String propertyName, ConfigurationElement configElement) +59

System.Web.HttpApplication.BuildIntegratedModuleCollection(List`1 moduleList) +221

System.Web.HttpApplication.GetModuleCollection(IntPtr appContext) +1103

System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +122

System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +173

System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +255

System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +347

[HttpException (0x80004005): Could not load file or assembly ‘Microsoft.Exchange.Common, Version=15.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.]

System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +552

System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +122

System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +737

You’ve noticed that reviewing the BinSearchFolders application settings for ecp folder in the Exchange Back End website shows that the Value is configured with %ExchangeInstallDir%:

Changing this to the path without using the variable appears to fix the ECP page but not OWA:

Solution

One of the possible solutions to correct the issue is to use the UpdateCas.ps1 script located in the \Microsoft\Exchange Server\V15\Bin folder to rebuild the /OWA and /ECP directory:

image
image

Proceed to test the /owa and /ecp directories once the PowerShell completes.

Posted by Terence Luk at 10:29 AM 

Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest

Labels: Exchange 2019Microsoft

Windows Disable SWEET32

$regkey = "HKLM:SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168"
$name = "Enabled"
$isexist = (Get-ItemProperty $regkey -EA Ignore).PSObject.Properties.Name -contains $name
if (-Not $isexist) {
New-Item -Path "HKLM:SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168" -Force
New-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168" -Name "Enabled" -PropertyType DWORD -Value "0x0" -Force
iisreset /restart
}

Доменная авторизация в 1С на Linux сервере

Пример для версии 8.3.22.2239 (x86_64)

  1. Создать пользователя в AD (Например – usr1cv8x с сложным паролем, но потребуется он только при настройке – strongpassword)
  2. Ввести Linux сервер в Домен штатными средствами
  3. Выполнить на Windows сервере
    ktpass -princ usr1cv8/1csrvhostname.domain.name@DOMAIN.NAME -mapuser usr1cv8x -pass strongpassword -out usr1cv8.keytab
    Это создаст файл и пропишет user logon name
  4. Чтобы не пересылать keytab файл проще его генерировать сразу на Linux сервере (обязательно -e RC4-HMAC), для этого
    ktutil
    addent -password -p usr1cv8/1csrvhostname.domain.name@DOMAIN.NAME -k 6 -e RC4-HMAC
    Ввести пароль от учетной записи usr1cv8x
    wkt /opt/1cv8/x86_64/8.3.22.2239/usr1cv8.keytab
    q
  5. По дефолту 1с ищет usr1cv8.keytab в корневой папке конкретной версии, При желании файл можно разместить в любом другом месте, нужно только изменить переменную SRV1CV8_KEYTAB.
  6. Назначить права на созданный файл
    chown usr1cv8:grp1cv8 /opt/1cv8/x86_64/8.3.22.2239/usr1cv8.keytab
    chmod 600 /opt/1cv8/x86_64/8.3.22.2239/usr1cv8.keytab
  7. Следующие проверочные комманды не должны выдать ошибки
    klist -e -k -t /opt/1cv8/x86_64/8.3.22.2239/usr1cv8.keytab
    kinit -k -t /opt/1cv8/x86_64/8.3.22.2239/usr1cv8.keytab usr1cv8/1csrvhostname.domain.name@DOMAIN.NAME
  8. Если сходу не заработало включаем логирование 1с сервера:
    • Для настройки сбора логов необходимо выполнить следующие действия:
    • 1. Перейдите в пользователя root.su –
    • 2. Создайте папку для логов.mkdir -p /var/log/log1c
    • 3. Назначьте владельца.chown usr1cv8:grp1cv8 /var/log/log1c
    • 4. Создайте каталог conf в /opt/1cv8/conf
      mkdir -p /opt/1cv8/conf
    • 5. Назначьте владельца каталогу conf
      chown usr1cv8:grp1cv8 /opt/1cv8/conf
    • 6. Создайте файл настроек технологического журнала 1С.nano /opt/1cv8/conf/logcfg.xml
    • Содержание файла:<config xmlns="http://v8.1c.ru/v8/tech-log">
    • <log location="/var/log/log1c" history="12">
    • <event>
    • <eq property="name" value="excp"/>
    • </event>
    • <event>
    • <eq property="name" value="excpcntx"/>
    • </event>
    • <event>
    • <eq property="name" value="admin"/>
    • </event>
    • <event>
    • <eq property="name" value="clstr"/>
    • </event>
    • <event>
    • <eq property="name" value="conn"/>
    • </event>
    • <event>
    • <eq property="name" value="sesn"/>
    • </event>
    • <event>
    • <eq property="name" value="proc"/>
    • </event>
    • <event>
    • <eq property="name" value="DBPOSTGRS"/>
    • <ge property="Durationus" value="10000000"/>
    • </event>
    • <property name="all"/>
    • </log>
    • <plansql/>
    • </config>
    • 7. Назначьте владельца файлу logcfg.xml.chown usr1cv8:grp1cv8 /opt/1cv8/conf/logcfg.xml
    • 8. Подождите 1-2 минуты.
  9. Файл /etc/hosts (ВАЖНО)
    • cat /etc/hosts
      127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
      ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
      10.50.43.182 1csrvhostname.domain.name
  10. В свойствах пользователя выбрать «Аутентификация операционной системы» и в поле «Пользователь» прописать \\DOMAIN.NAME\e.ivanov

Ошибки:

  1. 1c GSS-API error gss_acquire_cred: No credentials were supplied, or the credentials were unavailable;
    No key table entry found matching usr1cv8/1cl02@
    – Не правильно прописан файл etc hosts
  2. KDC reply did not match expectations while getting initial credentials – Домен должен быть прописан в верхнем регистре

Пример krb5.config

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = TEST.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true

[realms]
WEBSITE.COM = {
kdc = myserver.test.com
admin_server = myserver.test.com
}

[domain_realm]
.test.com = TEST.COM
Test.com = TEST.COM

OpenVAS task result to Zabbix

Add to crontab at Openvas host:

sudo -u _gvm gvm-cli --gmp-username USER --gmp-password PASSWORD socket --xml '<get_tasks filter="apply_overrides=1"/>' > /tmp/openvasreport.xml

Script /tmp/openvasreporter.sh:

#!/bin/bash
ids=`xmllint --xpath "//task/@id" /tmp/openvasreport.xml | cut -c 2-`

if [ x"$1" = "xdiscovery" ]
then
echo '['
for id in $ids
do
    name=`xmllint --xpath "//task[@$id]/name/text()" /tmp/openvasreport.xml`
    echo \{\"gvmtaskname\":\"$name\",\"gvmtaskid\":\"${id:4:-1}\"\},
done
echo \{\"gvmtaskname\":\"dumbtask\",\"gvmtaskid\":\"dumpid\"\}
echo ']'
fi


if [ x"$1" = "xstatus" ]; then
    #echo '['
    status=`xmllint --xpath '//task[@id="'$2'"]/status/text()' /tmp/openvasreport.xml`
    severity=`xmllint --xpath '//task[@id="'$2'"]/last_report/*/severity/text()' /tmp/openvasreport.xml`
    timestamp=`xmllint --xpath '//task[@id="'$2'"]/last_report/*/timestamp/text()' /tmp/openvasreport.xml`
    #echo $status:$severity:$timestamp
    echo \{\"gvmtaskstatus\":\"$status\",\"gvmtaskseverity\":\"$severity\",\"gvmtimestamp\":\"${timestamp:0:-15}\"\}
    #echo ']'
fi

Zabbix Userparametrs

UserParameter=openvas.ids[*], /tmp/openvasreporter.sh $1
UserParameter=openvas.status[*], /tmp/openvasreporter.sh $1 $2

Import updates manually into WSUS with PowerShell

$kb = Read-Host -Prompt "Which KB do you want to search for?"
$uc = Invoke-WebRequest -UseBasicParsing `
-Uri "https://www.catalog.update.microsoft.com/Search.aspx?q=$kb"

$uc.Links | where onClick -Like "*goToDetails*"|
foreach {($_.outerHTML -replace '(<a id=.*?>|</a>)|\s{2,}','') + ";" + $_.id -replace '_link',''} |
ConvertFrom-Csv -Delimiter ";" -Header "Description","ID"| Format-List

$wsus = Get-WsusServer
$wsus = Get-WsusServer -Name <WSUS-FQDN> -PortNumber 8531 -UseSsl
$wsus.ImportUpdateFromCatalogSite('<Update-ID>', '<UpdateFile.msu>')
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /V SchUseStrongCrypto /T REG_DWORD /D 1