Блог о Gentoo и около-линуксовым штукам

Показаны сообщения с ярлыком debian. Показать все сообщения
Показаны сообщения с ярлыком debian. Показать все сообщения

13 июня 2018 г.

Заметка по настройке exim4 на работу с Gmail @ Debian

02:21 Опубликовал Дмитрий Исаенко , Нет комментариев
При сбоях в работе демонов часто внутри них есть возможность слать письма. Мне бы хотелось бы получать отчёты на почту в случае чего-то непредвиденного. Раньше я пользовался ssmtp и он действительно хорош для embedded-систем, но Debian советует использовать exim4. Ну что же, я его попробовал и он действительно хорош. 
Ниже краткая заметка (конспект с материалов сайта wiki Debian, см.в конце) как быстро прикрутить зарегестрированный адрес в gmail для передачи сообщений в мир.

Для начала ставим exim4:
# aptitude install exim4-daemon-light exim4-config
Настраиваем exim4:
# dpkg-reconfigure exim4-config
1. Общий тип почтовой конфигурации: «отправка почты через smarthost; приём по SMTP или через fetchmail»
2. Почтовое имя системы: «localhost»
3. IP-адреса, с которых следует ожидать входящие соединения SMTP: «127.0.0.1»
4.Другие места назначения, для которых должна приниматься почта: оставить пустым
5. Машины, для которых доступна релейная передача почты:
 оставить пустым
6. IP-адрес или имя хоста являющегося исходящим smarthost: «smtp.gmail.com::587»
7. Скрывать локальное почтовое имя в исходящей почте? НЕТ
8. Сокращать количество DNS-запросов до минимума (дозвон по требованию)? НЕТ
9. Метод доставки локальной почты: mbox формат в /var/mail/
10. Разделить конфигурацию на маленькие файлы? ДА (или НЕТ)
Редактируем пароль для аккаунта в gmail
# vim /etc/exim4/passwd.client
 *.google.com:имя_пользователя_gmail@gmail.com:y0uRpaSsw0RD

Добавим правило для перезаписи имени отправителя (/etc/email-addresses ):
(В данный момент это не требуется, но мейнтейнеры exim говорят, что будет не лишним.)
# echo 'локальное_имя_пользователя: имя_пользователя_gmail@gmail.com' >> /etc/email-addresses
# echo 'локальное_имя_пользователя@localhost: имя_пользователя_gmail@gmail.com' >> /etc/email-addresses
# echo 'локальное_имя_пользователя@hostname1: имя_пользователя_gmail@gmail.com' >> /etc/email-addresses
# echo 'локальное_имя_пользователя@hostname1.localdomain: имя_пользователя_gmail@gmail.com' >> /etc/email-addresses
Применяем изменения:
# update-exim4.conf
# invoke-rc.d exim4 restart
# exim4 -qff
Говорим что вся почта, которую система будет генерировать и пытаться отправить root должна посылаться на адрес gmail (например на тот же, с которого происходит отправка. Или другой.):
vim /etc/aliases
root: имя_пользователя_gmail@gmail.com
Протестируем:
echo "Мудрое сообщение"|mail -s 'Значимый заголовок' root
Также может понадобиться разрешить gmail работу с непроверенными источниками. Это та фича, которая при попытке привязать новый почтовый клиент спрашивает разрешения. При её отключении спрашивать перестанет.

Всё. Проще чем казалось :)

Ссылки:
https://wiki.debian.org/GmailAndExim4

7 марта 2018 г.

Deban stretch: возвращаем старые имена сетевых интерфейсов

07:34 Опубликовал Дмитрий Исаенко Нет комментариев
После загрузки systemctl status показывал мне статус degraded. Хотелось разобраться, что ему не нравится. Как оказалось, проблема была в именах сетевых интерфейсов которые генерировались автоматически. Что же, настало время венуть привычные вместо enp0s1 и т.п.
Приступим!

# systemctl status
...
    State: degraded
...

# systemctl
...
networking.service    loaded failed failed    Raise network interfaces
...
Исправляем добавив правило в udev.
# vim /etc/udev/rules.d/10-rename-network.rules
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ff:ff:ff:ff:ff", NAME="eth0"
Теперь исправим наши настройки автозагрузки поменяв имя интерфейса:
# vim /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
И после перезагрузки всё будет как надо!

14 декабря 2017 г.

OpenVPN на Debian 9. Шпаргалка.

05:44 Опубликовал Дмитрий Исаенко , 4 коммент.
Шпаргалка по быстрому разворачиванию OpenVPN на Debian (испытано на версии Debian 9).
Просто копируем это дело в файл, исключая подсвеченное желтым, и выполняем через source ./file .
Для начала, серверная часть. У меня возникли проблемы со стандартным EasyRSA, поэтому использую версию из апстрима.

Серверная часть:

# apt-get install openvpn
# cd /etc/openvpn
# wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.3/EasyRSA-3.0.3.tgz
# tar zxvf EasyRSA-3.0.3.tgz 
# rm EasyRSA-3.0.3.tgz
# cd EasyRSA-3.0.3/
# vim vars
if [ -z "$EASYRSA_CALLER" ]; then
        echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2
        echo "This is no longer necessary and is disallowed. See the section called" >&2
        echo "'How to use this file' near the top comments for more details." >&2
        return 1
fi
set_var EASYRSA "$PWD"
set_var EASYRSA_DN      "cn_only"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_CA_EXPIRE       36500               # истекает через 100 лет
set_var EASYRSA_CERT_EXPIRE     36500               # истекает через 100 лет
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-1.0.cnf"  
set_var EASYRSA_REQ_CN          "srv"               # ДОЛЖНО БЫТЬ УНИКАЛЬНЫМ
set_var EASYRSA_DIGEST          "sha256"
set_var EASYRSA_BATCH           "1"                 # не безопастно. Убдеитесь, что оно вам надо
# ./easyrsa init-pki
# ./easyrsa build-ca nopass
# ./easyrsa gen-dh
# ./easyrsa  build-server-full server nopass        # Возможны ошибки. Нужно обратить внимание
# cp ./pki/ca.crt ../server/
# cp ./pki/dh.pem ../server/
# cp ./pki/issued/server.crt ../server/
# cp ./pki/private/ ../server/
# cp ./pki/private/server.key ../server/
# cd  /etc/openvpn/server/
# openvpn --genkey --secret tls.ta
# vim /etc/openvpn/server.conf
local 192.168.1.55       # установим локальный адрес для прослушивания входящих соединений на этом интерфейсе. См. 'ip a'
port 1194
proto udp
dev tun                 # используем tun вместо tap
cipher AES-256-CBC      # на ваше усмотрение
tls-server
tls-crypt /etc/openvpn/server/tls.ta
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
server 10.0.0.0 255.255.255.0
push 'route 0.0.0.0 255.255.255.0'
push 'dhcp-option DNS 8.8.8.8'  # учитываем специфику Andoid
push 'redirect-gateway'         # установите 'def1' или 'local def1' если нужно
client-to-client
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
mute 10
# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
# sysctl -p
# iptables -A INPUT -p UDP --dport 1194 -j ACCEPT           # разрешаем входящие соединения на порт 1194 с любого интерфейса
# iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT              # разрешаем обмен трафиком между подсетями
# iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT              # разрешаем обмен трафиком между подсетями
# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE # используем маскарадинг
# iptables-save > /etc/iptables.up.rules
# vim /etc/network/if-pre-up.d/iptables
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules
# chmod +x /etc/network/if-pre-up.d/iptables
# systemctl start openvpn@server
# systemctl enable openvpn@server
Сервер настроен. Но нет ни одного ключа для клиентов. Тут два варианта — делать всё ручками или воспользоваться готовым скриптом.

Вариант "всё ручками":

# cd /etc/openvpn/EasyRSA-3.0.3/
# ./easyrsa build-client-full client1 nopass            # где client1 имя клиентских файлов
# cp pki/private/client1.key /home/user/
# cp pki/issued/client1.crt /home/user/
# cp pki/ca.crt /home/user/
# cp /etc/openvpn/server/tls.ta /home/user/
# vim /home/user/client1.ovpn                           # дальше на ваше усмотрение
client
tls-client
tls-crypt tls.ta
dev tun
proto udp
remote hostname.org.ru 1194
cipher AES-256-CBC
resolv-retry infinite
nobind
ca ca.crt
cert android.crt
key android.key
persist-tun
persist-key
verb 3
remote-cert-tls server   

Вариант "всё готовым скриптом"

# cd /etc/openvpn/EasyRSA-3.0.3/
Идём качать последнюю версию ovpnWrapper: https://github.com/developersu/ovpnWrapper/releases
Качаем его и распаковываем в эту директорию.
Далее идём читать инструкцию сюда: https://developersu.blogspot.ru/2017/12/ovpnwrapper.html

Готово!
Если сервер OpenVPN находится за NAT, то будет приятным дополнением влепить правила на гейтвее (роутере, как правило):
# route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.55
Тут надо заменить последнее на адрес OpenVPN сервера. Ну и порт к нему прокинуть тоже не помешает - 1194 ;)
Чтобы после перезагрузки это дело не слетело, идём в Luci→Сеть→Статические маршруты

И добавляем новое правило:
* тут указан ip 192.168.1.5 но для данного примера стоит указать 192.168.1.55 как описано ранее

Сохраняем, применяем. Перезагружать не требуется.

На этом всё =)
Пользуйтесь!

ovpnWrapper

05:07 Опубликовал Дмитрий Исаенко , , , Нет комментариев
При использовании OpenVPN удобнее всего выдавать пользователю один файл со всеми настройками, ключами и необходимыми сертификатами. К счастью, их легко встроить в файл .ovpn. 
Итак встраивать, как известно, нужно:
ca.crt
client.crt
client.key
Не плохо было бы автоматизировать процесс. Для этого и написан ovpnWrapper. Это достаточно простой скрипт на python для генерирования и/или агрегирования всех необходимых файлов в один. (Ссылка в конце.)
Используется он в паре с easyrsa3 (семантика более ранних версий не поддерживается). Его нужно поместить в ту же папку, что и easyrsa и немного настроить.

Рассмотрим поближе.
В первой строке необходимо указать путь до интерпретатора python 3. 
#!/usr/bin/python3.5
Далее нам интересна строка, где мы указываем путь до папки, в которой хотим хранить сгенерированные файлы .ovpn.
ovpnFolder = os.environ['HOME']+"/ovpn/"
Как видно, по-умолчанию она указывает на папку ovpn/ в домашней директории.
Исправим serverCA, который определяет полный путь к файлу ca.crt
serverCA = '/etc/openvpn/server/ca.crt'
Исправим также commonTLS который должен указывать на нужный файл  (добавлено в версии 0.2. Если вам это не нужно, используйте 0.1)
commonTLS = '/etc/openvpn/server/tls.ta'
И последнее, но не по значимости, head. Тут указываются все предопределённые настройки.
head = "\
client                                     \n\
tls-client                                 \n\
dev tun                                    \n\
proto udp                                  \n\
remote your.host.name.located.here.! 1194  \n\
cipher AES-256-CBC                         \n\
resolv-retry infinite                      \n\
nobind                                     \n\
persist-tun                                \n\
persist-key                                \n\
verb 3                                     \n\                                                                                                                                                                                          
" 
Теперь меняем права файлику:
# chmod +x ovpnWrapper.sh
И запускаем, передавая в качестве единственного параметра имя для файлов-сертификата, ключа и сгенерированного .ovpn.
# ./ovpnWrapper.sh client42
Он проверит, не существует ли уже сгенерированных ключа+сертификата клиента, и если нет, то создаст их. Если есть — просто создаст .ovpn файл в указанной выше директории.
Всё что требуется, читать вывод скрипта (Будьте бдительны: английский).
Вообще у меня easyrsa на каком-то этапе ругался на openssl-1.1.0f но всё что нужно генерировал.

На этом всё. Приложение качать отсюда: https://github.com/developersu/ovpnWrapper/releases/