Включаем поддержку oauth2 в postfix для работы с Gmail
Включаем поддержку oauth2 в postfix для работы с Gmail
Почему?
В 2021 Google перейдет на oauth2 режим аутентификации, в связи с этим я решил заранее обновить настройки на своих серверах.
- На всех серверах postfix работает режиме null-client;
- Настроен relayhost на gmail с использованием механизма cyrus-sasl-plain;
- Приложения используют sendmail для отправки почтовых сообщений.
Изменения:
- Нужно собрать пакет cyrus-sasl-xoauth2, здесь src.rpm;
- Нужно собрать пакет fetchmail-oauth2, здесь src.rpm;
- Нужно настроить fetchmail-oauth2;
- Нужно получить первичный токен;
- Нужно изменить настройки postfix;
- Нужно настроить регулярное обновление токенов через systemd timers.
Установка пакетов
cd /tmp
wget http://repo.edenprime.kz/7/x86_64/cyrus-sasl-xoauth2-0.2-1.el7.x86_64.rpm
wget http://repo.edenprime.kz/7/x86_64/fetchmail-oauth2-0.1-1.el7.x86_64.rpm
sudo yum localinstall cyrus-sasl-xoauth2-0.2-1.el7.x86_64.rpm fetchmail-oauth2-0.1-1.el7.x86_64.rpm -y
Настройка fetchmail-oauth2
При установке пакета устанавливаются следующие файлы/каталоги:
- /etc/fetchmail-oauth2
- /usr/bin/fetchmail-oauth2.py
- /usr/bin/googleAuthenticator
- /usr/share/fetchmail-oauth2/lockedMake
- /usr/share/fetchmail-oauth2/Makefile
- /usr/share/fetchmail-oauth2/fetchmail-oauth2.timer
- /usr/share/fetchmail-oauth2/fetchmail-oauth2.service
- /usr/share/fetchmail-oauth2/main.cf
- /usr/share/fetchmail-oauth2/tls_policy
- /usr/share/fetchmail-oauth2/relayhost_map
- /usr/share/fetchmail-oauth2/saslpass
- /usr/share/fetchmail-oauth2/simple.cfg
Это было сделано специально, чтобы у вас была возможность самостоятельно настроить пакет под ваши нужды и чтобы пакет не конфликтовал с другими пакетами.
Разместим файлы и поместим их в нужные места.
Config file
Необходимо скопировать файл /usr/share/fetchmail-oauth2/simple.cfg в /etc/fetchmail-oauth2/simple.cfg. Нужно вставить в файл simple.cfg значения client_id, client_secret.
Initial token - Первичный токен
Теперь нам нужно получить refresh token и access token. Для этого нам необходимо запустить следующую команду:
/usr/bin/fetchmail-oauth2.py -c /etc/fetchmail-oauth2/simple.cfg --obtain_refresh_token_file
Systemd timer and service
Вместо cron будем использовать systemd timer. Также, если у вас другое имя конфигурационного файла (/etc/fetchmail-oauth2/simple.cfg), то вам нужно изменить файл fetchmail-oauth2.service.
Таймер настроен на запуск в 45 минут каждого часа, при необходимости вы можете изменить это значение в файле /etc/systemd/system/fetchmail-oauth2.timer
echo "Setting systemd timer and service
sudo cp /usr/share/fetchmail-oauth2/fetchmail-oauth2.* /etc/systemd/system/
sudo systemctl enable fetchmail-oauth2.timer
Настройка Postfix
Предполагается, что настройки postfix по умолчанию. Если же у вас уже внесены изменения в postfix, то внимательно ознакомьтесь с содержимым файла /usr/share/fetchmail-oauth2/main.cf.
Скопируем необходимые файлы
sudo cp /usr/share/fetchmail-oauth2/main.cf /etc/postfix
sudo cp /usr/share/fetchmail-oauth2/tls_policy /etc/postfix
sudo cp /usr/share/fetchmail-oauth2/relayhost_map /etc/postfix
sudo cp /usr/share/fetchmail-oauth2/saslpass /etc/postfix
sudo cp /usr/share/fetchmail-oauth2/lockedMake /etc/postfix
sudo cp /usr/share/fetchmail-oauth2/Makefile /etc/postfix
Изменим имя машины и имя домена
sudo sed -i 's%myhostname = myhost.example.com%myhostname = alpha.domain.kz%' /etc/postfix/main.cf
sudo sed -i 's%mydomain = example.commy%domain = example.kz%' /etc/postfix/main.cf
Теперь нужно внести изменения в содержимое Makefile. Значение XOAUTH2_MAP привести к следующему виду.
XOAUTH2_MAP = \
[smtp.gmail.com]:587~alpha@domain.kz~/etc/fetchmail-oauth2/accesstoken
Если у вас больше одной учетной записи нужно дописать в несколько строк.
Нужно перезапустить postfix
sudo systemctl restart postfix
sudo systemctl status postfix
Проверка
sudo yum install mailx
echo "Hello world $(date)" | mail -s "test message" bravo@domain.kz
sudo tail /var/log/maillog
Если не заработало, смотрим в логи, дебажим и устраняем ошибки.