POP3
1 |
# telnet IP-adress server 110 |
1 2 3 4 |
Trying IP-adress server... Connected to IP-adress server. Escape character is '^]'. +OK Dovecot ready. |
1 |
user user1@domain.com |
1 |
+OK |
1 |
pass 123456789 |
1 |
+OK Logged in. |
1 |
list |
1 |
+OK 2 messages: |
1 2 3 |
1 653 2 839 . |
# Удалить сообщение 839
1 |
dele 2 |
1 |
+OK Marked to be deleted. |
# Прочитать сообщение 653
1 |
retr 1 |
# Выход
1 |
quit |
1 2 |
+OK Logging out. Connection closed by foreign host. |
POP3s
1 |
# openssl s_client -connect IP-adress-server:995 -quiet |
Либо
1 |
# openssl s_client -starttls pop3 -connect IP-adress-server:110 -quiet |
1 2 |
…………………………. +OK Dovecot ready. |
1 |
user user1@domain.com |
1 |
+OK |
1 |
pass 123456789 |
1 |
+OK Logged in. |
# Просмотр общего кол-ва сообщений и общий размер всех сообщений
1 |
stat |
1 |
+OK 1 653 |
# Удаление сообщения653 (по факту удаляет после ввода команды QUIT)
1 |
dele 1 |
1 |
+OK Marked to be deleted. |
# Отмена ранее запланированного удаления письма/писем
1 |
rset |
1 |
+OK |
# Выход
1 |
quit |
1 2 |
+OK Logging out. Closed |
IMAPs
1 |
# openssl s_client -connect IP-adress-server:993 -quiet |
Либо
1 |
# openssl s_client -starttls imap -connect IP-adress-server:143 -quiet |
1 2 |
………………………… * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready. |
#Подключаемся с логином и паролем
1 |
a1 LOGIN user1@domain.com 123456789 |
1 |
a1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE] Logged in |
# Просмотр списка папок/файлов
1 |
a2 LIST "" "*" |
1 2 |
* LIST (\HasNoChildren) "." "INBOX" OK List completed. |
# Просмотр папки INBOX
1 |
a3 EXAMINE INBOX |
1 2 3 4 5 6 7 8 |
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS ()] Read-only mailbox. * 1 EXISTS * 0 RECENT * OK [UIDVALIDITY 1431721926] UIDs valid * OK [UIDNEXT 3] Predicted next UID * OK [NOMODSEQ] No permanent modsequences a3 OK [READ-ONLY] Select completed. |
# Просмотр тела сообщения
1 |
a4 FETCH 1 BODY[] |
1 2 |
………………………… a4 OK Fetch completed. |
# Выход
1 |
a5 LOGOUT |
1 2 |
* BYE Logging out a5 OK Logout completed. |
IMAP
Аналогично для IMAP-подключения
1 |
# telnet IP-adress server 143 |
1 2 3 4 |
Trying IP-adress server... Connected to IP-adress server. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready. |
1 |
a1 LOGIN user1@domain.com 123456789 |
1 |
a1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE] Logged in |
1 |
a2 LIST "" "*" |
1 2 |
* LIST (\HasNoChildren) "." "INBOX" a2 OK List completed. |
1 |
a3 EXAMINE INBOX |
1 2 3 4 5 6 7 8 |
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS ()] Read-only mailbox. * 1 EXISTS * 0 RECENT * OK [UIDVALIDITY 1431721926] UIDs valid * OK [UIDNEXT 3] Predicted next UID * OK [NOMODSEQ] No permanent modsequences a3 OK [READ-ONLY] Select completed. |
1 |
a4 FETCH 1 BODY[] |
1 2 |
………………………… a4 OK Fetch completed. |
1 |
a5 LOGOUT |
1 2 3 4 |
* BYE Logging out a5 OK Logout completed. Connection closed by foreign host. # |
Некоторые полезные команды:
1 |
LOGIN [username] [password] |
1 |
LIST [flags] [folder separator] [search term] |
1 |
STATUS [mailbox] [flags] |
1 |
SELECT [mailbox] |
1 |
FETCH [first]:[last] flags |
1 |
FETCH [mail number] body[header] |
1 |
FETCH [mail number] body[text] |
1 |
LOGOUT |
SMTP
Подключение на localhost (отправка сообщения без аутентификации)
1 |
# telnet localhost 25 |
1 2 3 4 |
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 server1.mydomain.com ESMTP Postfix |
1 |
ehlo localhost |
1 2 3 4 5 6 7 8 9 10 11 |
250-server1.mydomain.com 250-PIPELINING 250-SIZE 20480000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN |
1 |
mail from: root@localhost |
1 |
250 2.1.0 Ok |
1 |
rcpt to: myuser@gmail.com |
1 |
250 2.1.5 Ok |
1 |
DATA |
1 |
354 End data with <CR><LF>.<CR><LF> |
1 |
FROM: root@localhost |
1 |
TO: myuser@gmail.com |
1 2 |
Subject: Test email This is only test message |
1 |
. |
1 |
250 2.0.0 Ok: queued as 7E31840351 |
1 |
quit |
1 2 |
221 2.0.0 Bye Connection closed by foreign host. |
Подключение на внешний адрес сервера с аутентификацией SMTP для отправки письма
Получим base64-строку из логина/пароля пользователя.
1 2 |
Логин - myusername Password - a123456 |
Прямая перекодировка
1 |
# printf '\0myusername\0a123456' | base64 |
1 |
AG15dXNlcm5hbWUAYTEyMzQ1Ng== |
Обратная перекодировка
1 |
# echo AG15dXNlcm5hbWUAYTEyMzQ1Ng== | base64 -d |
1 |
myusernamea123456 |
Аналогично,но с помощью других инструментов
Perl
1 |
# perl -MMIME::Base64 -e 'print encode_base64("\0myusername\0a123456")' |
1 |
AG15dXNlcm5hbWUAYTEyMzQ1Ng== |
1 |
# perl -MMIME::Base64 -e 'print decode_base64("AG15dXNlcm5hbWUAYTEyMzQ1Ng==")' |
1 |
myusernamea123456 |
Python
1 |
# printf '\0myusername\0a123456' | python -m base64 |
1 |
AG15dXNlcm5hbWUAYTEyMzQ1Ng== |
1 |
# echo AG15dXNlcm5hbWUAYTEyMzQ1Ng== | python -m base64 -d |
1 |
myusernamea123456 |
PHP
1 |
# printf '\0myusername\0a123456' | php -r 'echo base64_encode(fgets(STDIN));' |
1 |
AG15dXNlcm5hbWUAYTEyMzQ1Ng== |
1 |
# php -r 'echo base64_decode($argv[1]);' AG15dXNlcm5hbWUAYTEyMzQ1Ng== |
1 |
myusernamea123456 |
OpenSSL
1 |
# printf '\0myusername\0a123456' | openssl base64 |
1 |
AG15dXNlcm5hbWUAYTEyMzQ1Ng== |
1 |
# echo AG15dXNlcm5hbWUAYTEyMzQ1Ng== | openssl base64 -d |
1 |
myusernamea123456 |
Пароль должен экранироваться одним нулем, если он начинается с буквы и тремя нулями, если пароль начинается с цифры
1 |
# perl -MMIME::Base64 -e 'print encode_base64("\0myusername\0a123456")' |
1 |
AG15dXNlcm5hbWUAYTEyMzQ1Ng== |
1 |
# perl -MMIME::Base64 -e 'print encode_base64("\0myusername\000123456")' |
1 |
AG15dXNlcm5hbWUAMTIzNDU2 |
1 |
# telnet server1.mydomain.com 25 |
1 2 3 4 |
Trying 159.224.XXX.YYY... Connected to server1.mydomain.com. Escape character is '^]'. 220 server1.mydomain.com ESMTP Postfix |
1 |
ehlo mydomain.com |
1 2 3 4 5 6 7 8 9 10 11 |
250-server1.mydomain.com 250-PIPELINING 250-SIZE 20480000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN |
1 |
AUTH PLAIN |
1 |
334 |
1 |
AG15dXNlcm5hbWUAYTEyMzQ1Ng== |
1 |
235 2.7.0 Authentication successful |
1 |
mail from: myuser@mydomain.com |
1 |
250 2.1.0 Ok |
1 |
rcpt to: myuser@gmail.com |
1 |
250 2.1.5 Ok |
1 |
DATA |
1 |
354 End data with <CR><LF>.<CR><LF> |
1 |
FROM: myuser@mydomain.com |
1 |
TO: myuser@gmail.com |
1 2 |
Subject: Again the email from mydomain.com Test data |
1 |
. |
1 |
250 2.0.0 Ok: queued as 42A1640111 |
1 |
quit |
1 2 |
221 2.0.0 Bye Connection closed by foreign host. |
SMTPS
Для шифрования трафика в почтовых протоколах между клиентом и сервером используется SSL/TLS в двух вариантах. Использование специальных портов, при соединении с которым сначала осуществляется установка SSL/TLS, после чего уже поверх него идет обычный почтовый трафик. Второй вариант, более предпочтительный — соединение с обычным портом для сервиса и переход сессии в зашифрованный вид с использованием расширения STARTTLS.
Для проверки работы почтового сервера поверх SSL/TLS можно использовать утилиту openssl, дальше действуя, как при обычной сессии через telnet.
1 |
# openssl s_client -starttls smtp -crlf -connect server1.mydomain.com:25 |
1 |
# openssl s_client -starttls smtp -crlf -connect server1.mydomain.com:587 |
1 |
# openssl s_client -crlf -connect server1.mydomain.com:465 |
FTP
1 |
# telnet server1.mydomain.com 21 |
1 2 3 4 |
Trying 159.224.XXX.YYY... Connected to 159.224.XXX.YYY. Escape character is '^]'. 220 FTP Server ready. |
1 |
user myuser |
1 |
331 Password required for myuser |
1 |
pass mypassword |
1 |
230 User myuser logged in |
1 |
help |
1 2 3 4 5 6 7 8 9 |
214-The following commands are recognized (* =>'s unimplemented): CWD XCWD CDUP XCUP SMNT* QUIT PORT PASV EPRT EPSV ALLO* RNFR RNTO DELE MDTM RMD XRMD MKD XMKD PWD XPWD SIZE SYST HELP NOOP FEAT OPTS AUTH CCC* CONF* ENC* MIC* PBSZ PROT TYPE STRU MODE RETR STOR STOU APPE REST ABOR USER PASS ACCT* REIN* LIST NLST STAT SITE MLSD MLST 214 Direct comments to root@localhost |
1 |
quit |
1 2 |
221 Goodbye. Connection closed by foreign host. |
HTTP
Проверка кода состояния из заголовков
1 |
# telnet [СЕРВЕР] [ПОРТ] |
1 2 3 4 5 6 |
Trying xxx.xxx.xxx.xxx... Connected to [СЕРВЕР]. Escape character is '^]'. HEAD [ВЕБ-СТРАНИЦА] HTTP/1.1 HOST: [СЕРВЕР] <Нажмите ENTER> |
1 |
# telnet kamaok.org.ua 80 |
1 2 3 |
Trying 80.240.142.135... Connected to kamaok.org.ua. Escape character is '^]'. |
1 |
HEAD / HTTP/1.1 |
1 |
Host: kamaok.org.ua |
1 2 3 4 5 6 7 |
HTTP/1.1 301 Moved Permanently Server: nginx Date: Mon, 01 Aug 2016 08:54:19 GMT Content-Type: text/html Content-Length: 178 Connection: keep-alive Location: https://kamaok.org.ua |
Получение содержимого веб-страницы
1 |
# telnet [СЕРВЕР] [ПОРТ] |
1 2 3 4 5 6 |
Trying xxx.xxx.xxx.xxx... Connected to [СЕРВЕР]. Escape character is '^]'. GET [ВЕБ-СТРАНИЦА] HTTP/1.1 HOST: [СЕРВЕР] <Нажмите ENTER> |
1 |
# telnet kamaok.org.ua 80 |
1 2 3 |
Trying 80.240.142.135... Connected to kamaok.org.ua. Escape character is '^]'. |
1 |
GET / HTTP/1.1 |
1 |
HOST: kamaok.org.ua |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
HTTP/1.1 301 Moved Permanently Server: nginx Date: Thu, 24 Aug 2017 15:30:40 GMT Content-Type: text/html Content-Length: 178 Connection: keep-alive Location: https://kamaok.org.ua/ <html> <head><title>301 Moved Permanently</title></head> <body bgcolor="white"> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html> |
Проверка существования E-mail адреса
Такую проверку можно осуществить с помощью команды SMTP VRFY, если она не отключена на сервере
Параметром disable_vrfy_command = yes
По умолчанию разрешено использовать VRFY-команду
1 |
# postconf -d | grep disable_vrfy_command |
1 |
disable_vrfy_command = no |
Проверка существующего/несуществующего E-mail-адреса
1 |
# telnet mail.mydomain.com 25 |
1 2 3 4 |
Trying <IP-address-mail-server>... Connected to mail.mydomain.com. Escape character is '^]'. 220 mail.mydomain.com ESMTP Postfix |
1 |
helo localhost |
1 |
250 mail.mydomain.com |
Проверка существующего E-mail-адреса
1 |
VRFY myusername@mydomain.com |
1 |
252 2.0.0 myusername@mydomain.com |
Проверка несуществующего E-mail-адреса
1 |
VRFY myusername2@mydomain.com |
1 |
550 5.1.1 <myusername2@mydomain.com>: Recipient address rejected: User unknown in local recipient table |
Но администратор принудительно может отключить проверку существования E-Mail-адреса
Установив disable_vrfy_command в yes в файле /etc/postfix/main.ccf
1 |
# grep disable_vrfy_command /etc/postfix/main.cf |
1 |
disable_vrfy_command = yes |
При использовании SMTP VRFY через telnet в таком случае будет ответ от сервера
1 |
502 5.5.1 VRFY command is disabled |
1 |
# telnet mail.mydomain.com 25 |
1 2 3 4 |
Trying <IP-address-mail-server>... Connected to mail.mydomain.com. Escape character is '^]'. 220 mail.mydomain.com ESMTP Postfix |
1 |
helo localhost |
1 |
250 mail.mydomain.com |
1 |
VRFY myusername2@mydomain.com |
1 |
502 5.5.1 VRFY command is disabled |
Источник:
https://habrahabr.ru/company/truevds/blog/262819/
http://linux-notes.org/otpravka-i-poluchenie-pochty-cherez-telnet/
https://rtcamp.com/tutorials/mail/server/testing/imap/
https://rtcamp.com/tutorials/mail/server/testing/pop/
https://mnorin.com/kak-proverit-sushhestvovanie-adresa-e-mail.html