Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Правила правильной массовой рассылки или как не попасть в спам ? PHP OpenDkim +Postfix настройка

Лекция



Привет, сегодня поговорим про правила правильной массовой рассылки , обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое правила правильной массовой рассылки , спам , opendkim , postfix , настоятельно рекомендую прочитать все из категории Вредоносное ПО и защита информации.

Правила правильной массовой рассылки или как не попасть в спам ? PHP OpenDkim +Postfix настройка1 Изучаем требования принимающих почту серверов

ТРЕБОВАНИЯ к отправляемым сообщениям gmail https://support.google.com/mail/answer/81126?hl=ru

требования яндекса http://help.yandex.ru/mail/honest-mailers.xml

ТРЕБОВАНИЯ mail ru https://help.mail.ru/mail-help/rules/technical

Рекомендации для всех http://www.uceprotect.net/downloads/asta.pdf

https://support.google.com/mail/answer/1366858?hl=ru&expand=5

кроме выполнения требований и рекомендаций желательно добавиться в статистику приема писем соответвующих серверов

2. всегда проверяем логи сервиса на сервере отправляющий почту,

у вас скорее всего установлен один из этих sendmail postfix qmail

3. Настраиваем DKIM. проверяем всеми способами (через gmail, yandex, сторонние сервера).

Отрправляем письма на gmail/yandex/mail в оригинале письма смотрим отметки о прохождении проверки (будут записи DKIP pass). Есть спец сервисы для проверки правильности настройки, там тоже проверяемся

https://help.ubuntu.com/community/Postfix/DKIM

(подробная настройка ниже)

если коротко то у вас в днс должно быть дополнительная TXT запись

селектор._domainkey.вашдомен.com.
v=DKIM1; g=*; k=rsa; p=PpYHdE2t4c3v4db6g,ij/k0.o,mytbv5cxs4fghjPaz1IbOGs/6bm5QIDAQAB

селектор вы сами придумаете любой. потом для него через opendkim генерируете открытый и закрытый ключ
_domainkey- это просто стандартное ключевое слово- у всех одинаково.
затем настраиваете dkim- указываете какой ключ и где они лежат (отк и закрытый)
через что принимать файлы на подпись
с каких доменов и ип адресов возможна отправка , и если не удовлетворена то или в  
                                                       спам  или не принимать стороннему сервису почту



настраиваете почтовый агент для того чтобы он перед отправкой писем в инет добавил особые заголовки сгенерированные dkim
это можнон сделать через файловый или портовый unix сокет

4. Настраиваем SPF. проверяем аналогично DKIM

DNS можно проверить тут например


http://dkimcore.org/tools/dkimrecordcheck.html
http://dkimcore.org/tools/keycheck.html
http://www.protodave.com/tools/dkim-key-checker/


5. Настраиваем статистику yandex, настраиваем фидбеклуп, Настраиваем тоже самое на майл ру


Мониторим статистику

https://postmaster.mail.ru/
https://postoffice.yandex.ru/
https://gmail.com/postmaster/


6. В письмах обязательно должна быть ссылка «отписаться»

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

7. у вас должен быть постоянный ip v4, правильно настроены все dns записи для домена

и для ip должна быть правильно настроена PTR запись(скорее всего ее может изменить только владелец ип адреса- то есть провайдер)

HELO должно соответсвороть SPF правлу в ДНС и PTR записи

ptr=вашему домену

8. в теле письма не должно быть ничего сторонннего и ни каких скриптов

9 письмо должно отправляться со всеми правильными заголовками,

в правильном порядке, и с првавильной кодировкой,

обязательно должен быть верный Return-Path

его можно добавить или в насройках php он правильные настройки postfix передаст или с помощью пятого параметра в функции mail

"-femail@mysite.com")

10. регулярно проверяем ip сервера , что бы он не был в черных списках антиспама

BACKSCATTERER http://www.backscatterer.org

BARRACUDA http://barracudacentral.org

CASA-CBLPLUS http://www.anti-spam.org.cn

IMP-SPAM http://antispam.imp.ch

INPS_DE http://dnsbl.inps.de

LASHBACK http://blacklist.lashback.com/

MAILSPIKE-BL http://mailspike.net/

NIXSPAM http://www.heise.de/ix/nixspam/dnsbl_en/

PSBL http://psbl.surriel.com/

RATS-ALL http://www.spamrats.com/

REDHAWK http://spameatingmonkey.com

SEM-BACKSCATTER http://spameatingmonkey.com

SEM-BLACK http://spameatingmonkey.com

SORBS-DUHL http://www.sorbs.net

SORBS-SPAM http://www.sorbs.net

SPAMCANNIBAL http://www.spamcannibal.org/

SPAMCOP http://spamcop.net

SPAMHAUS-ZEN http://www.spamhaus.org/

SWINOG http://antispam.imp.ch/

TRUNCATE http://www.gbudb.com

UCEPROTECTL http://www.uceprotect.net/

WPBL http://wpbl.pc9.org/

Также есть готовые сервисы по проверке в базах черных адресов вашего ip

http://xseo.in/dnsbl

результат бдет примерно такой

NSBL сервер Наличие в DNSBL Код(ы) ответа сервера* Доп. информация**
all.s5h.net Нет
b.barracudacentral.org Нет
bl.emailbasura.org Нет
bl.spamcannibal.org Нет
bl.spamcop.net Нет
blackholes.five-ten-sg.com Нет
blacklist.woody.ch Нет
bogons.cymru.com Нет
cbl.abuseat.org Нет
cdl.anti-spam.org.cn Нет
combined.abuse.ch Нет
db.wpbl.info Нет
dnsbl-1.uceprotect.net Нет
dnsbl-2.uceprotect.net Нет
dnsbl-3.uceprotect.net Нет
dnsbl.anticaptcha.net Нет
dnsbl.cyberlogic.net Нет
dnsbl.dronebl.org Нет
dnsbl.inps.de Нет
dnsbl.sorbs.net Нет
drone.abuse.ch Нет
duinv.aupads.org Нет
dul.dnsbl.sorbs.net Нет
dyna.spamrats.com Да
dynip.rothen.com Нет
exitnodes.tor.dnsbl.sectoor.de Нет
http.dnsbl.sorbs.net Нет
ips.backscatterer.org Нет
ix.dnsbl.manitu.net Нет
korea.services.net Нет
misc.dnsbl.sorbs.net Нет
noptr.spamrats.com Нет
orvedb.aupads.org Нет
pbl.spamhaus.org Да
proxy.bl.gweep.ca Нет
psbl.surriel.com Нет
rbl.interserver.net Нет
rbl.megarbl.net Нет
relays.bl.gweep.ca Нет
relays.bl.kundenserver.de Нет
relays.nether.net Нет
sbl.spamhaus.org Нет
service.mailblacklist.com Нет
short.rbl.jp Нет
singular.ttk.pte.hu Нет
smtp.dnsbl.sorbs.net Нет
socks.dnsbl.sorbs.net Нет
spam.abuse.ch Нет
spam.dnsbl.sorbs.net Нет
spam.spamrats.com Нет
spambot.bls.digibase.ca Нет
spamrbl.imp.ch Нет
spamsources.fabel.dk Нет
ubl.lashback.com Нет
ubl.unsubscore.com Нет
virbl.bit.nl Нет
virus.rbl.jp Нет
web.dnsbl.sorbs.net Нет
wormrbl.imp.ch Нет
xbl.spamhaus.org Нет
zen.spamhaus.org Да
zombie.dnsbl.sorbs.net Нет

11 используйте сервсы для проверки почтовых сообщений

Проверки spf ptr записей

тхт запись для домена v=spf1 a mx ip4:123.123.321.321 ~all

или v=spf1 +mx +a ~all

ptr запись должна выглядить так

123.123.321.321.in-addr.arpa IN PTR mysite.com

тема должна иметь свою кодировку

$newsubject='=?UTF-8?B?'.base64_encode($subject).'?=';

должны быть заголовки

$headers = 'From: no-reply@myсайт.ком' . Об этом говорит сайт https://intellect.icu . "\r\n" .
'Reply-To: no-reply@сайт.ком' . "\r\n" .

List-Unsubscribe: , 

 


'X-Mailer: PHP/' . phpversion();

длмнные строки должны разрываться

$message = wordwrap($message, 70);
$t= mail($to, $newsubject, $message, $headers,"-fno-reply@myсайт.ком");

mail("email@mysite.com", "subj", "message text", "From: email@mysite.com\nContent-Type: text/plain; charset=windows-1251\nContent-Transfer-Encoding: 8bit", "-femail@mysite.com");

комплексо протестировать можно , например, тут http://www.mail-tester.com/

результаы теста должны быть примерно такими

SpamAssassin считает, что Вы можете улучшить рейтинг ваших писем

Знаменитый спам фильтр SpamAssassin. Оценка: -1.9.
Оценка ниже -5 считается спамом.

-0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid
Этот отрицательный рейтинг станет положительным, если подтвердить подпись. Как это сделать смотрите ниже.
0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
Отлично! Ваша подпись действительна
0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain
Отлично! Ваша подпись действительна, и она принадлежит вашему доменному имени
-0.243 PP_MIME_FAKE_ASCII_TEXT MIME text/plain claims to be ASCII but isn't
-0.972 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail)
SPF запись не верна, Вы должны исправить это (смотрите ниже в секции проверки подлинности сервера)
0.01 T_RP_MATCHES_RCVD Envelope sender domain matches handover relay domain
-0.791 UPPERCASE_50_75 message body is 50-75% uppercase

Вы прошли проверку подлинности не полностью

Мы проверяем подлинность сервера, с которого отправлено письмо

[SPF] Ваш сервер

12.345.678.109

имеет право использовать noreply@сайт.com

[Sender ID] Ваш сервер 12.345.678.109 имеет право использовать noreply@сайт.com

Ваша DKIM подпись действительна

У вас нет записи DMARC

Домен из обратной DNS-зоны не соответствует домену отправителя.

Your domain name сайт.com is assigned to a mail server.

С Вашим хостом сайт.com связан почтовый сервер.

Ваше сообщение может быть улучшено

Проверяется, так ли хорошо Ваше письмо отформатировано или нет.

HTML-версии сообщения в Вашем письме нет.

У Вас нет изображений в Вашем письме

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

Ваши материалы безопасны

Проверяется наличие в Вашем письме наличие опасных HTML элементов, таких как JavaScript, фреймы, внедренное содержимое и апплеты.

Мы проверим, если Вы использовали систему сокращения ссылок.

Проверяем, использует ли Ваше письмо системы сокращения ссылок.

Ваше сообщение не содержит заголовок List-Unsubscribe

Заголовок List-Unsubscribe требуется, если вы посылаете массовые рассылки, что позволяет пользователю легко отказаться от нее.

Ваше сообщение не содержит заголовок List-Unsubscribe

результат должен быть

Вы не в черном списке

12 проверяйте частоту уведомлений и его содержимое

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

в противном случае принимающая сторона может внести в сво черный список ваш сервер.

13 Проверяйте и Удалияйте/Очищайте/Сбросывайте очередь в postfix

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

Иногда, приходиться удалять письма из очереди, и если не знаете как это сделать ( или может забыли), то данная тема поможет с этим разобраться.

Для начала, проверим что иметься в очереди:

$·postqueue -p

У меня например, образовалось вот такая очередь:

-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------

dsfsdf C9 438 Wed Apr 5 19:34:35 root@lintellect.icu

(connect to example.org[2236:22300:220:1:2238:1893:25c8:1946]:25: Connection timed out)

user@example.org

CC3B64A220C4 430 Wed Apr 2 12:30:46 root@intellect.icu

(connect to example.org[91.111.211.11]:25: Connection timed out)

user@example.org

7DFGGWEFCCE 3221 Fri Apr 7 14:21:23 MAILER-DAEMON

(connect to captain-notes[/var/lib/imap/socket/lmtp]: No such file or directory)

www@intellect.icu

-- 4 Kbytes in 3 Requests.

Или, имеется другая утилита:

$ mailq

Чтобы сохранить результат в текстовый файл, можно запустить:

 $·postqueue -p >·mailq_output.txt

$·mailq >mailq_output.txt

Просмотр сообщения (Содержимое, заголовок и тело)

Предположим, что сообщение имеет идентификатор XXXXXXX (я выше показывал как )

$ postcat -vq XXXXXXXXXX

$ postcat -vq XXXXXXXXXX > msg_output.txt

Удалить/Очистить/Сбросить очередь в postfix

Если есть необходимость удалить конкретное письмо ( нужно знать его ID), выполните команду:

# postsuper -d mail_queue_id

Чтобы очистить очередь в Postfix MTA просто введите следующую команду:

 # postfix flush

Или:

 # postfix -f

Чтобы удалить всю почту из очереди, введите:

# postsuper -d ALL

Чтобы удалить все письма в отложенной очереди (deferred), введите:

# postsuper -d ALL deferred

Чтобы удалить все письма из почтовой очереди, которые пришли с test_user@linux-notes.org или отправлены на адрес test_user@linux-notes.org (команда одинакова независимо от того, является ли это адресом отправителя или получателя), вы можете использовать следующую команду:

#·mailq | tail -n +2 | awk 'BEGIN { RS = "" } /test_user@intellect\.icu$/ { print $1 }' | tr -d '*!' | postsuper -d -

 #·mailq | tail -n +2 | grep -v '^ *(' | \

gawk 'BEGIN {RS = ""} /test_user@intellect.icu/ {print $1}' | \

tr -d '*!' | sudo postsuper -d -

Ничего сложного в этом нет.

Нашел в интернете, готовый скрипт, который удаляет всю почту из mailq, которая соответствует регулярному выражению (указанному в качестве первого аргумента).

$ vim drop_email_queue.pl

И прописываем в него:

 

#!/usr/bin/perl

$REGEXP = shift || die "no email-adress given (regexp-style, e.g. bl.*\@yahoo.com)!";

@data = qx;

for (@data) {

if (/^(\w+)(\*|\!)?\s/) {

$queue_id = $1;

}

if($queue_id) {

if (/$REGEXP/i) {

$Q{$queue_id} = 1;

$queue_id = "";

}

}

}

#open(POSTSUPER,"|cat") || die "couldn't open postsuper" ;

open(POSTSUPER,"|postsuper -d -") || die "couldn't open postsuper" ;

foreach (keys %Q) {

print POSTSUPER "$_\n";

};

close(POSTSUPER);

Например, удалите все поставленные в очередь сообщения (исходящие и входящие) для https://intellect.icu:

 # ./drop_email_queue.pl intellect.icu

Удалите все сообщения в очереди, содержащие слово «world»:

 # ./drop_email_queue.pl world

14 Настройка DKIM

В этой статье будет рассмотрена настройка цифровой подписи для Вашего домена.

Технология DomainKeys Identified Mail (DKIM) — это метод e-mail аутентификации: к отправленному письму добавляется заголовок DKIM-Signature, в котором содержится зашифрованная информация о домене отправителя. Таким образом, содержимое заголовка DKIM-Signature подтверждает отправителя письма. На стороне получателя подпись автоматически проверяется, после чего для определения репутации отправителя применяются "белые списки" и "черные списки". После оценки репутации отправителя письма это письмо может быть принято, помещено в папку "Спам", либо отправлено на дополнительную проверку.

настроить DKIM-подпись для следующих способов отправки писем:

  • через SMTP-сервер;
  • через функцию PHP mail(), он же sendmail

А теперь подробнее как настроить DKIM в Ubunutu 16

1. Устанавливаем

 apt install opendkim

apt install opendkim-tools

2. генерируем ключ и копируем в папки настройки

opendkim-genkey -t -s mail -d mysite.com

появятся 2 файла (/home/user/mail.txt хешем,

и /home/user/mail.private с закрытым ключем )

нужно создать папки /var/log/dkim-filter и /etc/mail/ если их нет

cp mail.private /etc/mail/dkim.key

на файл конфига должен иметь права 600 и владельцем должен быть пользователь opendkim

хеш нужно вставить в днс TXT запись

/home/user/mail.txt

sdkim._domainkey IN TXT ( "v=DKIM1; k=rsa; t=y; p=MIGfMA0GC ...  nlkgKWqM8E+kHwIDAQAB" ) ;

----- DKIM key mail for mysite.com

Для этого в DNS создаем TXT запись

селектор._domainkey.вашдомен.com.

проверить добавленную записьможно в линуксе через  DIG 
пример 
dig google._domainkey.protodave.com TXT

3. настроиваем 2 конфиг-файла opendkim

/etc/opendkim.conf
/etc/default/opendkim
селектор вы сами придумаете любой но он дожен быть такой же как в TXT записи например, sdkim
3.1 /etc/opendkim.conf
Syslog                  yes
#UserID                 105 # 'id postfix' in your shell
Domain                  mysite.com
Selector                      sdkim
#Domain                  * - все домены
KeyFile /etc/mail/dkim.key # See bellow how to generate and set up the key Selector mail
AutoRestart             yes
Background              yes
Canonicalization        relaxed/relaxed
DNSTimeout              5
Mode                    sv
SignatureAlgorithm      rsa-sha256
SubDomains              no
X-Header                no
Statistics              /var/log/dkim-filter/dkim-stats
#RequiredHeaders        yes

 
3.2 /etc/default/opendkim

 
SOCKET="inet:8891@localhost" # Ubuntu default - listen on loopback on port 8891
остальное должно быть закоментировано

 

4. настроиваем конфигфайл postfix

/etc/postfix/main.cf

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

если имеете Postfix/DomainKeys

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

5. добавляем в ДНС ТХТ запись взятую из сформированного файла opendkim

Правила правильной массовой рассылки или как не попасть в спам ? PHP OpenDkim +Postfix настройка

6. перезапускаем и смотрим логи и то что opendkim слушает порт

sudo service opendkim start

sudo service opendkim restart

sudo /etc/init.d/postfix restart

netstat -ntap | grep opendkim

grep -i dkim /var/log/mail.log

7. возможные проблемы с правами,

на файл конфига должен быть ровно 600 и созданный от имени пользователя opendkim

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

если вы добавили параметер t то gmail test mode DKIM будет, уберите его из днс записи.

проверте что вы сгенерировали ключ не менее чем 1024 битным шифрованием

8. проверяем заголовки в почтовых сервисах

Правила правильной массовой рассылки или как не попасть в спам ? PHP OpenDkim +Postfix настройка

reason=pubkey_syntax -ошибка на стороне получателя в заголовках полученного письма

X-DKIM-FAIL: DKIM test failed: invalid (address=info@site.com domain=site.com reason=pubkey_syntax).
X-DMARC-Policy: no
X-Magic: A2BBA6E1549E1F578244526 .... 918F9CA260D04BD65B
X-Mras: PROBABLE_SPAM
X-Mru-Authenticated-Sender: uid:33@site.com
X-Spam: undefined
X-UBL: White


Проверьте DNS запись TXT возможно есть пробел или перенос в публичном ключе

9. reason=pubkey_unavailable -ошибка на стороне получателя в заголовках полученного письма
X-DKIM-FAIL: DKIM test failed: invalid (address=info@site.com domain=site.com reason=pubkey_unavailable).
X-DMARC-Policy: no
X-Magic: B35BD59DA489B18B ... EE438187B06E8F9CA260D04BD65B
X-Mras: PROBABLE_SPAM
X-Mru-Authenticated-Sender: uid:33@site.com
X-Spam: undefined
X-UBL: White

 
Проверьте DNS запись TXT возможно есть пробел или перенос в публичном ключе, название селектора чтобы в насройках DKIM, в письме и  в DNS записи совпадали

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=site.com;
	s=SELECTOR; t=1473841660;
	bh=tynu3gy6dVp9yA.....oDMk6pM=;
	h=To:Subject:Message-ID:Date:From:From:Sender:To:CC:Subject:
	 Message-ID:Date;
	b=TqVp3+wapQuy......nrPUcNr4MI=

 

dig SELECTOR._domainkey.site.com TXT

; <<>> DiG 9.10.3-P4-Ubuntu <<>> SELECTOR._domainkey.site.com TXT
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36811
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;SELECTOR._domainkey.site.com. IN TXT

;; ANSWER SECTION:

SELECTOR

._domainkey.siter.com. 86400 IN TXT "v=DKIM1; k=rsa; p=MIGfM...B"

;; Query time: 47 msec
;; SERVER: 11.11.11.11#53(1.1.1.10)
;; WHEN: Wed Sep 14 10:41:32 CEST 2016
;; MSG SIZE rcvd: 307

10. “Sender:” and “Message-Id” fields not included in signature
В конфиг opendkim.conf дким добавьте 
...

SignHeaders From,Sender,To,CC,Subject,Message-ID,Date,Content-Type,MIME-Version
OversignHeaders From,Sender,To,CC,Subject,Message-ID,Date,Content-Type,MIME-Version

....

15. Настраиваем Brand Indicators for Message Identification (BIMI). для отображения своих «аутентифицированных логотипов» внутри почтовых клиентов. Для этого нужно изготовить VMC  сертификаты , которые необходимы компаниям для подтверждения прав собственности на логотип.

Правила правильной массовой рассылки или как не попасть в спам ? PHP OpenDkim +Postfix настройка

Вау!! 😲 Ты еще не читал? Это зря!

На этом все! Теперь вы знаете все про правила правильной массовой рассылки , Помните, что это теперь будет проще использовать на практике. Надеюсь, что теперь ты понял что такое правила правильной массовой рассылки , спам , opendkim , postfix и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Вредоносное ПО и защита информации

создано: 2014-11-23
обновлено: 2021-07-14
134964



Рейтиг 4 of 10. count vote: 7
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Вредоносное ПО и защита информации

Термины: Вредоносное ПО и защита информации