Upload
technopark
View
133
Download
0
Embed Size (px)
Citation preview
Смаль Дмитрий[email protected]
E-mail vs Email
История Email 1965 – программа mail для CTSS, пересылка в пределах мейнфрейма
1971 – первый email в сети ARPANET
1978 – программа uucp для обмена Email в UNIX
1982 – предложен протокол SMTP (RFC 821) и формат интернет сообщений (RFC 822)
1984 – FidoNET
190x – Развитие локальной почты, Microsoft Mail, IBM Lotus Notes
1998 – Mail.Ru
2004 – Gmail
Формат электронного письма
From: Dmitry Smal <[email protected]>
To: Pupkin <[email protected]>
Subject: party for everybody discuss
Date: Fri, 18 May 2012 08:17:59 -0700
Hi there!
Can't stop dancing! And you?
Bye bye!
Заголовки EmailFrom, To – от кого и кому письмо
Subject – тема письма
Date – дата отправки
Message-ID – уникальный идентификатор письма
References – id письма на которое отвечаем
Сс – “копия”, аналогичен To, но означает, что получатель – не главный
Bcc – “скрытая копия”, аналогиче Сс, но получатели не увидят email указанный в Bcc
Reply-To – email адрес, на который нужно отвечать
Content-Type – MIME тип содержимого
Содержимое письмаПервоначальная кодировка – 7bit ASCII
Как передать что-то большее ?
1) Quoted printable =EA =0C
2) Base64 YW55IGNhcm5hbCBwbGVhcw==
Современные почтовые агенты поддерживают 8bit
Content-Type: text/plain; charset=utf-8
MIMEMultipurpose Internet Message Extensions
Задачи
1) Передача не-ASCII текста через ASCII канал
2) Передача не-текстовых приложений
3) Передача сообщений из нескольких частей (multipart body messages)
4) Передача не-ASCII заголовков
Заголовки
Content-ID – уникальный ID части, для ссылок
Content-Type – MIME тип сообщения или части
Content-Disposition – расположение части
Content-Transfer-Encoding – кодирование части
To: =?UTF-8?B?0JTQuNC80LA=?= <[email protected]>
Content-Type: multipart/mixed;
boundary="----4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794"
------4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
Ym9keQ==
------4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794
Content-Type: application/octet-stream;
name="=?UTF-8?B?ZmF2aWNvbi5pY28=?="
Content-Disposition: attachment
Content-Transfer-Encoding: base64
AAABAAEAEBAAAAEAIABoBA..........AAAAAAAA==
------4MNjdUkz-ZBcPvpoGwPsUtn9u:1338241794--
Цепочки писемУ письма есть идентификатор (почти уникальный):
Message-ID: <[email protected]>
При ответе на сообщение агент добавляет MessageID исходного письма в References
References: <A> <B> <C>
Таким образом: A → B → C → текущее письмо
Обычно в Subject письма добавляется Re:
> А содержимое исходного письма
> отбивается символами “больше”
Процесс передачи Email
MUA – Mail User Agent – программа, предоставляющая пользовательский интерфейс, например MS Outlook, sendmail
MTA – Mail Transfer Agent (relay) – программа (почтовый сервер), отвечающая за пересылку почты к по сети. SMTP протокол.
MDA – Mail Delivery Agent – программа, отвечающая за доставку почты конечному пользователю. POP3 и IMAP
SMTP – отправка почтыSimple Mail Transfer Protocol
1) Работает поверх TCP, порт 25
2) Текстовый протокол
Команды: MAIL FROM, RCPT TO, DATA, QUIT
Статусы ответа: 2xx – команды выполнена
3xx – ожидаются доп. данные
4xx – временная ошибка
5xx – неисправимая ошибка3) ESMTP – набор расширений для SMTP:
TLS, Авторизация, Pipelining
C:HELO
S:250 domain name should be qualified
C:MAIL FROM: <[email protected]>
S:250 [email protected] sender accepted
C:RCPT TO:<[email protected]>
S:250 [email protected] ok
C:DATA
S:354 Enter mail, end with "." on a line by itself
C:from: [email protected]
C:to: [email protected]
C:subject: tema
C:
C:Hi!
C:.
S:250 769947 message accepted for delivery
C:QUIT
Отправка писем из pythonimport smtplib
from email.MIMEText import MIMEText
text = 'Тестовое письмо!\nОтправка письма из python'
msg = MIMEText(text, "", "utf-8")
msg['Subject'] = 'Тестовое письмо'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
s = smtplib.SMTP('smtp.gmail.com', 25)
s.ehlo()
s.starttls()
s.ehlo()
s.login("[email protected]", "password")
s.sendmail('[email protected]', '[email protected]', msg.as_string())
s.quit()
Хранение и получение почты1) Изначально планировалось хранить почту на компьютере пользователя. Relay – только временное хранилище.
POP3 – протокол получения почты из почтового ящика.
2) Однако у хранения почты на отдельном сервере есть преимущества – надежность, доступность.
IMAP – протокол доступа к содержимому почтового ящика.
POP3 – получение почтыPost Office Protocol
1) Работает поверх TCP, порт 110
2) Текстовый протокол
APOP – авторизация (в зашифрованом виде)
USER, PASS – авторизация в открытом виде
LIST – получение списка сообщений
RETR – получение одного сообщения
DELE – удаление сообщения с ящика
QUIT – выход
3) “Транзакции” - письма удаляются только при отключении клиента
4) Опциональная поддержка шифрования TLS
C: APOP mrose c4c9334bac560ecc979e58001b3e22fb
S: +OK mrose's maildrop has 2 messages (320 octets)
C: STAT
S: +OK 2 320
C: LIST
S: +OK 2 messages (320 octets)
S: 1 120
S: 2 200
S: .
C: RETR 1
S: +OK 120 octets
S: <the POP3 server sends message 1>
S: .
C: DELE 1
S: +OK message 1 deleted
C: QUIT
Почему текстовые протоколы?1) Не нужно специальных программ – достаточно простого текстового редактора
2) Не нужно средств отладки – протокол можно отлаживать просто просматривая его
3) Не нужно специальных клиентов – вы можете использовать HTTP, SMTP, POP3 с помощью telnet
4) Переносимость
Обзор серверов
Courier Mail Server
Рассылки email1) По набору email адресов (зачастую спам)
2) Груповые адреса (RFC 2142)
[email protected] – маркетинг
[email protected] – тех. поддержка
[email protected] – поддержка почты
[email protected] – поддержка DNS
[email protected] – поддержка веб-сайта
3) Cписки рассылки (mailing list)
Специальный адрес [email protected]
Сервер рассылки
Цифровые подписи
PGP – Pretty Good PrivacyOpenPGP – стандарт, выросший из PGP
PGP, GnuPG, FileCrypt – реализации стандарта, программное обеспечение, позволяющее шифровать и подписывать email и даже диски!
Основа PGP – сеть доверия, схема похажая на иерархию центров сертификации, но у пользователя есть возможность самому выбрать какому сертификату он доверяет.
Уровень 0 – сертификат, которому вы доверяете
Уровень 1 – вы доверяете тем, кому доверяет обладатель данного сертификата
Уровень 2 – фактически равносилен встроенному
Как это выглядит в Email ?From: Dmitry Smal <[email protected]>
Subject: GPG test
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
-----BEGIN PGP MESSAGE-----
Charset: ISO-8859-1
Version: GnuPG v2.0.19 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
hQEMA8ijKqZcm8oeAQf/dcpkWwglHLN4A
. . .
mRunewtvjjTj3pLfjPkuZaEzIQU=3D
=3DHHsM
-----END PGP MESSAGE-----
Как бороться со спамом?- Фильтрация (байесовский фильтр) – 95% эффективность, требует обучения
- Ручная фильтрация
- Крупные компании содержат отделы аналитиков
- Blacklist – списки IP адресов с которых идет спам
Причина спама – SMTP не проверяет отправителя
- Проверка обратной зоны DNS
- Отказ от открытых релеев, авторизация SMTP
- SPF записи в DNS
SPF – Sender Policy FrameworkДопустим есть домен company.com
В DNS делается запись вида:
company.com. IN TXT "v=spf1 +a +mx -all"
Либо, например
company.com. IN TXT "v=spf1 ip4:192.168.0.1/16 -all"
Это ограничивает адреса SMTP серверов company.com
Теперь принимающий SMTP сервер, получив запрос на отправку письма от имени [email protected] с ip адреса x.y.z.w, может сделать запрос к DNS и определить имеет ли данный хост права на отправку почты из указанного домена
DKIM Как не стать спамером ?
1) Создается пара - публичный/закрытый ключ
2) Публичный ключ для домена помещается в DNS:
_domainkey.example.com. TXT "t=s; o=~;"
mail._domainkey.example.com. TXT
"k=rsa; t=s; p={PUBLIC_KEY_CONTENT}"
3) SMTP сервер вашего домена подписывает каждое отправленное письмо с помощью закрытого ключа, добавляя к письмам заголовок DKIM-Signature
4) Принимающий SMTP сервер получает открытый ключ из DNS и проверяет подпись
Домашняя работа
Отправьте / прочитайте email
с помощью telnet