Вы работаете с IMAP-подключениями в PHP и сомневаетесь, действительно ли данные шифруются? Документация модуля IMAP печально известна неточностями – например, флаг /secure
может вызвать ошибку «Can’t do secure authentication», а /tsl
вообще не работает. Но как на самом деле убедиться, что пароль не утекает в открытом виде? Расскажу, как это проверить «в поле», даже если вы не гуру Linux.
Инструменты для анализа трафика: что выбрать и как настроить
Для начала определитесь с инструментом. Если коротко:
- tcpdump – классика для быстрого захвата пакетов через терминал. Подходит, когда нужно быстро проверить порт 993 без сложных фильтров.
- tshark (консольная версия Wireshark) – удобнее для детального анализа, особенно если сохранить дамп в .pcap и открыть его в графическом интерфейсе.
- ncat или telnet – для отправки тестовых plain-text запросов (но об этом позже).
Первым делом – узнайте имя сетевого интерфейса. Команда ifconfig -a | sed 's/[ t].*//;/^$/d'
выведет список доступных устройств (eth0, ens3 и т.д.). Допустим, это eth0.
Теперь запустите захват трафика на порту 993:
tcpdump -A -n -i eth0 "tcp port 993"
Ключ -A
отображает содержимое пакетов в ASCII, -n
отключает преобразование адресов в имена. Если видите строки вроде .AUTHENTICATE PLAIN
или base64-код – это тревожный звоночек (но не паникуйте раньше времени: base64 ≠ шифрование!).
Совет: Если сервер активно использует порт 993, добавьте фильтр по IP адресу:
"host mail.example.com and port 993"
. Так вы отсечете лишний шум.
Как отличить зашифрованный трафик от открытого
Представьте, вы подключаетесь к IMAP-серверу через порт 993 с флагом /ssl
. В идеале весь трафик должен выглядеть как случайный набор байтов. Вот как это проверить:
- Запустите tcpdump в одном окне терминала.
- В другом окне выполните PHP-скрипт с
imap_open()
. - Остановите захват (Ctrl+C) и просмотрите вывод.
Что должно быть:
- Строки типа «Client Hello», «Server Hello» в начале – это TLS-рукопожатие.
- Дальше – только «мусорные» символы вроде
▒4~▒▒▒...
.
Что не должно быть:
- Читаемые команды IMAP:
LOGIN user password
,SELECT INBOX
и т.п. - Прямые упоминания вашего пароля (даже в закодированном виде).
Кстати, если хочется наглядности, попробуйте специально сломать настройки. Подключитесь к порту 143 без STARTTLS – и вы увидите весь диалог в открытом виде (да, это тот самый «контрастный душ», который прояснит ситуацию).
Расширенный анализ: сохраняем дамп и смотрим в Wireshark
Для глубокого разбора удобнее использовать tshark или сохранить дамп в файл:
tcpdump -i eth0 -w imap_dump.pcap "port 993"
Перенесите файл imap_dump.pcap на свой ПК и откройте в Wireshark. Там можно:
- Отфильтровать трафик по
imap
в строке фильтров. - Кликнуть правой кнопкой на пакете → Follow → TCP Stream – увидите весь диалог в одном окне.
- Проверить, используется ли TLS 1.2/1.3 (во вкладке «Transport Layer Security»).
Если в Wireshark пишет «Application Data» и не расшифровывает содержимое – это хороший знак. Значит, данные зашифрованы, и для их просмотра нужен приватный ключ сервера (которого у вас, разумеется, нет).
Частые ошибки и как их избежать
1. «Ничего не вижу в выводе tcpdump»
– Возможно, трафик идёт через интерфейк lo (loopback), если скрипт и сервер на одной машине. Используйте -i lo
в этом случае.
2. «Вижу логин, но пароль скрыт»
– Некоторые серверы требуют отправлять пароль в формате base64 даже поверх TLS. Это нормально, если сам транспорт зашифрован.
3. «Не работает фильтр port 993»
– Убедитесь, что в команде указан правильный интерфейс. Если сомневаетесь, снимите весь трафик (-i any
) и потом отфильтруйте в Wireshark.
Заключение
Даже если документация PHP вводит в заблуждение, практическая проверка всё расставляет по местам. Помните:
- Порт 993 + флаг
/ssl
= TLS на всём протяжении соединения. /secure
– это про механизм аутентификации, а не про шифрование трафика.- Лучший способ убедиться – посмотреть своими глазами через tcpdump.
Теперь вы можете не просто верить настройкам, а проверять их. И как говаривал один мой знакомый админ: «Доверяй, но запускай tcpdump».