четверг, 15 июня 2017 г.

sSMTP

Эмулятор Sendmail для Unix.

OS: Debian Lenny.

Предположим, что мы имеем произвольный сервер под управлением Debian Lenny фиксированной конфигурации в полноценном окружении, обеспечивающем работу таких служб как разрешение доменных имён, доставки почтовой корреспонденции и тому подобного. Предположим, нам необходимо отправлять с нашего воображаемого сервера почтовую корреспонденцию. Что для этого требуется? Если сервер функционирует сам по себе, вне развитой инфраструктуры, то ничего другого не остается, как только подкорректировать конфигурацию MTA самого сервера (это может быть Sendmail, Postfix, Exim, Qmail и тому подобные приложения). А вот, в том случае, если у нас "под боком" имеется полнофункциональный почтовый сервер считаю целесообразным полностью переложить на него функции доставки электронной почты; наш воображаемый сервер будет обрабатывать свои функции, а почтовый доставлять то, для доставки чего он и предназначен - почту.

Воспользуемся утилитой sSMTP. Все, что она умеет, это "эмулировать" функционал Sendmail пересылки почты от локальных пользователей. Никаких прослушиваемых портов, никаких внешних сервисов, на которые могут "покусится" энтузиасты по раскрытию секретов, никаких конфигураций для "внешнего релея". Все, что может программа - это принять почтовый пакет от локального пользователя и отправить его по адресу путём использования внешнего почтового сервера в качестве "шлюза". Нам больше ничего и не требуется. Единственный недостаток - во время недоступности нашего внешнего почтового "шлюза" в силу отсутствия локальной очереди отправка корреспонденции будет невозможна; но я считаю, что недоступность почтового сервиса инфраструктуры - это проблема, на фоне которой другие временно теряют свою остроту.

# aptitude install ssmtp

При инсталляции sSMTP будет предложено удалить Exim - делаем это, для локального сервера он нам не нужен.

Делаем резервную копию конфигурационного файла sSMTP:

# cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.dist

Приводим содержимое конфигурационного файла к следующему виду:

root=postmaster
# Адрес почтового "шлюза" с указанием порта
mailhub=mx.domain.name:465
# Имя хоста на котором запущен sSMTP
hostname=service.domain.name
# Реквизиты пользователя на почтовом "шлюзе" через которого осуществляется пересылка почты
AuthUser=service@domain.name
AuthPass=strong.password
# Метод аутенификации
AuthMethod=LOGIN
# Указание применять шифрование соединения
UseTLS=YES
# Разрешаем заменять отправителю значение поля "From"
FromLineOverride=YES

И это, практически, все. После монструозных конфигураций Sendmail или Exim такой простой подход кажется невероятным, но настраивать в пересылке почты от локального пользователя удалённому шлюзу действительно просто нечего.

Возможно, работающий ранее в системе MTA не будет корректно удалён или остановлен. Подстановка sSMTP вместо него довольно проста и подразумеваем гарантированный "откат" до исходного состояния. Необходимо остановить работающий MTA, заблокировать его авто-запуск и подставить вместо ссылки на запуск Sendmail (традиционно считающимся MTA "по умолчанию" в ~NIX) ссылку на запуск sSMTP:

# mv /usr/sbin/sendmail /usr/sbin/sendmail.original
# ln -s /usr/sbin/ssmtp /usr/sbin/sendmail

Теперь все обращения к Sendmail будут осуществляться к sSMTP незаметно для пользователя сервиса.

Протестировать корректность установки и настройки sSMTP можно элементарно с командной строки непосредственно на сервере:

# echo "test" | ssmtp admin@domain.name

Понятно, что следует ожидать письма с содержимым "test" на почтовый ящик "admin@domain.name".

четверг, 8 июня 2017 г.

Команды EXIM

Командная строка Exim'а использует стандартный для Unix-систем способ задания опций. Каждая начинается с дефиса, после каждой может следовать несколько аргументов. 

exim -bP
Вывод всех значений, установленных в конфигурационном файле.

exim -bp 
Вывод почтовой очереди. Вывод списка сортируется в хронологическом порядке по прибытию сообщений. Если опция сопровождается списком идентификаторов сообщений, то показываются только эти сообщения. Пример вывода:
10h  729K 1RdheP-00021S-GM <info@domain.com.ua>
        D user@rambler.ru
          user2000@gmail.com
        D user@safaritour.com.ua
        D user@fortunat.zssm.zp.ua
Первая строка содержит 4 колонки: сколько сообщение находится в очереди, размер сообщения, ID сообщения, отправитель, как он указан в "конверте" (для bounce "<>"). Если сообщение заморожено (приостановлена попытка его доставки), в конце этой строки показывается текст "*** frozen ***". Адреса по которым сообщение уже доставлено отмечены символом "D" (Delivered - доставлено). Если оригинальный адрес раскрывается в несколько адресов через файл алиасов или форвардов, оригинальный показывается с "D" только когда завершены доставки для всех дочерних адресов.

exim -bpr
Вывод почтовой очереди, но без сортировки. Полезно, когда в очереди много сообщений, а сортировка не нужна.

exim -bpc
Вывод количества сообщений в очереди.

exim -Mvl <message id>
Посмотр лог сообщения.

exim -Mvb <message id>
Вывод тела сообщения.

exim -Mvh <message id>
Вывод заголовков сообщения

exim -Mrm <message id> <message id> ...
Удалить сообщение из очереди и не посылать никаких ошибок (в логах запись о удалении будет).

exim -Mg <message id> <message id> ...
Удалить сообщение из очереди и отослать "отлуп" (cancelled by administrator).

exim -M <message id> <message id> ...
Ускорить доставку сообщения (немедленно выполняет доставку сообщения).

exim -Mar <message id> <address> <address> ...
Добавить адрес в вписок получателей сообщения.

exim -Mes <message id> <address>
Заменить адрес отправителя в сообщении на указанный.

exim -Mf <message id> <message id> ...
Отметить перечисленные сообщения как "frozen". Попытки доставки сообщения прекращаются, пока сообщение не будет разморожено вручную, или пока не пройдет время указанное в "auto_thaw".

exim -Mt <message id> <message id> ...
"Разморозить" сообщения.

Для сообщений, которые подозреваются в спаме удобно сначала массово, сделать -Mf, потом -Mvl, -Mvh и -Mvb для пары выбранных наугад сообщений. Если все еще невозможно с консоли определить спам ли это (например, проблемы с кодировками или есть вложения), то можно с помощью -Mar добавить себя в список получателей, и ускорить данное сообщение с помощью -M. Когда все наконец станет ясно, то либо -Mrm, либо -Mt.

exipick -i | xargs exim -Mrm
Очистить очередь. Тоесть, по сути удаляем все сообщения из очереди.

exipick -zi | xargs exim -Mrm
Удалить из очереди все "замороженные" сообщения (помеченные как "frozen").

понедельник, 5 июня 2017 г.

TestDisk инструкция.

  TestDisk - весьма продвинутая утилита, предназначенная для всякого рода восстановительных действий. Не смотря на свое название TestDisk, состоит из трио-утилит: TestDisk, PhotoRec, FIdentifi. В данном конкретном случае, мы рассмотрим способ восстановления, нечаянно удаленных файлов со съемного носителя, например с флешки, но в целом, утилита настолько мощна, что описывать все ее возможности и различные настройки, не соответствует формату этой статьи. Мы подробно разберем, самый простой способ восстановления для общего понимания процесса.
Пару слов о содержимом, кратко и в общих чертах.
  «TestDisk» - может исправлять таблицы разделов, восстанавливать удаленные разделы и файлы, копировать файлы, исправлять загрузочные сектора, восстанавливать «MFT» и суперблоки из копий.

«PhotoRec» - умеет восстанавливать файлы с любых носителей из любых файловых систем, даже поврежденных, но только в «RAW».

«FIdentifi» - это своего рода расширение, дополнение к «PhotoRec», которое наиболее точным образом идентифицирует восстанавливаемые файлы по их расширению.

  Для нашей конкретной задачи, лучше всего подходит утилита «PhotoRec», т.к. ее возможности по восстановлению именно файлов, самые продвинутые и она порой может восстановить то, чего не может «TestDisk». Для начала, установим программу:
sudo apt-get install testdisk
Запускаем утилиту:
sudo photorec


  После ввода пароля, запустится утилита и покажет вам, какие диски она смогла обнаружить. В данном случае, на скриншоте ниже, выделен диск (флешка), размером в 500 (512) МБ. При помощи клавиатуры, стрелками верх/низ, выбираете нужный диск (флешка) и нажимаете «Enter». Хочу заметить, что утилита, фактически, почти во всех случаях, определяет нужный пункт автоматом, там, где это возможно.








  Открывается следующее окно с отображением файловой системы выбранного диска «FAT32», в левом нижнем углу должно быть выделено «Search», жмем «Enter».


  На следующем шаге, выбираем значение «Other», что соответствует нашей файловой системе «FAT32», обычно стоит по-умолчанию. Жмем «Enter».

  Далее, опять имеем две позиции для выбора: «Free» - утилита будет сканировать только свободное пространство, «Whole» - будет просканировано все. Для восстановления какого-нибудь одного файла или даже, допустим музыкальной коллекции, обычно хватает позиции «Free». Выбираем, что хотите и жмем «Enter».

  В следующем действие, предлагается выбрать директорию для сохранения восстанавливаемых файлов. Выбираете то, что вам нужно и жмете «Enter».

Здесь, можно нечего не трогать и нажать клавишу «Y», запустится процесс.

  Снимок самого процесса я пропустил, но когда он закончится, то вы получите такое сообщение:


  Это говорит о том, что все окончено, можете заходить в соответствующую директорию и искать свои файлы. Несколько слов о том, что же вы получаете в конечном итоге. «PhotoRec» очень хороша своей способностью находить любые файлы, но это и ее минус, т.к. по-мимо искомых файлов, будут найдены и восстановлены все файлы, которые находились на просканированном пространстве и их может быть довольно-таки много. Второй неприятный момент - утилита изменяет имена файлов и заменяет их на буквенно-цифровые значения. Если файлов было восстановлено много, то поиск одного нужного, путем обычного просмотра, может быть затруднен. Лучший вариант в таком случае - это зайти в директорию и воспользоваться поиском, вбив в строку поиска только расширение файла. Например, если вы восстанавливали графический файл с расширением «PNG», то в поиск "вбивайте" значение «.png», это значительно облегчит нахождение нужного нам файла.
Положительные характеристики TestDisk:
  • Просто необходимая утилита для восстановления, практически на любой случай жизни.

Отрицательные характеристики TestDisk:
  • Хоть она и прекрасно управляется из терминала, давно уже можно было б сделать графический интерфейс.

Уменьшение размера LVM раздела

Внимание
При всех действиях с файловой системой рекомендуется создать резервную копию данных
При установке RFRemix выбирая разметку диска отличную от "<уточнить>" инсталятор создаёт примерно следующую разбивку
/boot 200M ext4
VolGroup 100Gb 
 -lvm_root 98Gb / ext4
 -lvm_swap 2Gb swap
что в некоторых случаях бывает крайне неудобно. ---
Например, на каждом созданном разделе linux(в частности имеется ввиду фс ext2|3|4) "бронируется" под нужды пользователя root 5% от размера раздела. В нашем случае если корневой раздел будет полностью заполнен, любой пользователь отличный от root не сможет ввойти в систему. Или например, Вы выполняете обновление дистрибутива с 14 до 15 версии в процессе чего происходят какие-либо сбои, которые Вы не в силах исправить. Некоторым пользователям в данном случае легче установить ОС заново, но при этом не потерять свою информацию. В любом случае не зависимо от приведённых примеров рассмотрим случай когда необходимо уменьшить размер любого раздела входящего в состав группы LVM.

Перед изменением размера раздела его необходимо отмонтировать, но учитывая что редактировать нам надо корневой раздел, лучше загрузится с LiveCD/LiveDVD или с установочного диска в режиме rescue (для этого выбрать соответствующий пункт меню загрузки с диска).
При работе с rescue-диска, к командам LVM надо впереди добавять lvm, либо выполнять их из встроенного интерпретатора lvm:
# lvm pvs
либо
# lvm
lvm> pvs
Проверяем, определился или нет, системой наша LVM группа.
# pvs
  PV         VG         Fmt  Attr PSize   PFree  
  /dev/sda1  VolGroup   lvm2 a-   100,00g      0
# vgs
  VG         #PV #LV #SN Attr   VSize   VFree  
  VolGroup   1   2   0   wz--n- 100,00g      0
# lvs
  LV         VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  lv_root    VolGroup   -wi-a-  98,00g
  lv_swap    VolGroup   -wi-a-   2,00g
lvreduce урезает размер LVM раздела. Работает она следующим образом, параметр -L указывает на изменение размера раздела, здесь же есть 2 варианта: указание размера и относительное значение, со знаком + или -. Например, -L 83G урежет размер до 83G(то бишь lvm_root станет 83Gb вместо 98Gb), соответственно -L -15G или -L +15G уменьшит или увеличит размер на указанный (lvm_root станет 98G минус 15G или 98G плюс 15G).
Итак, нам надо уменьшить размер раздела следующей командой:
# lvreduce -r -L -15G /dev/Volgroup/lv_root
Наличие опции -r указывает, что надо также изменить размер файловой системы, без неё данные будут утеряны.
Успешность выполнения команды lvreduce проверяется просмотром свободного места в VolGroup.
# vgs
Свободного места должно быть 83G.

Создаём новый раздел для директории home
 lvcreate -L 83GB -n lv_home VolGroup 
и файловую систему на нём.
 mkfs.ext4 -L home /dev/VolGroup/lvm_home
Добавляем запись о разделе в файл /etc/fstab
 /dev/VolGroup/lvm_home  /home   etx4 defaults 1 2 
Перенести всю информацию из директории /home относительно раздела / (корневого раздела) в /home вновь созданого раздела (он будет пустой, если не считать системной директории lost+found)
Для этого:
  • создаём папки к которым будут смотрированы разделы
mkdir /mnt/{root,home}
  • монтируем
mount -t ext4 /dev/VolGroup/lv_root /mnt/root
mount -t ext4 /dev/VolGroup/lv_home /mnt/home
  • перемещаем информацию
mv -v /mnt/root/home /mnt/home
загружаем нашу ОС и проверяем логические разделы LVM
lvdisplay
  --- Logical volume ---
  LV Name                /dev/VolGroup/lv_root
  VG Name                VolGroup
       .....
  LV Size                15,00 GiB
       .....
   
  --- Logical volume ---
  LV Name                /dev/VolGroup/lv_home
  VG Name                VolGroup
       .....
  LV Size                83,00 GiB
       .....
   
  --- Logical volume ---
  LV Name                /dev/VolGroup/lv_swap
  VG Name                VolGroup
       .....
  LV Size                2,00 GiB
       .....

Установка и настройка KVM в Ubuntu 16.04


Для установки KVM в Ubuntu Server 16.04 нужно выполнить следующие шаги:

Убедиться что ваш компьютер поддерживает аппаратную виртуализацию:

$ sudo apt-get install cpu-checker
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

Установить необходимые пакеты qemu-kvm:

$ sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils

Создать и сконфигурировать мост (bridge):

$ sudo cp /etc/network/interfaces /etc/network/interfaces.bakup-12.nov.2016
$ sudo nano /etc/network/interfaces
Отредактировать файл сетевых настроек, как приведено ниже:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0

iface eth0 inet manual


auto br0
 iface br0 inet static
 address 192.168.10.100
 netmask 255.255.255.0
 broadcast 192.168.10.255
 dns-nameservers 192.168.10.1 8.8.8.8
gateway 192.168.10.1
 bridge_ports eth0
 bridge_stp off
 bridge_fd 0
 bridge_maxwait 0
Сохранить и закрыть файл /etc/network/interfaces и перезапустить сетевой сервис:
$ sudo systemctl restart networking
Вообще-то желательно перезагрузить компьютер:
$ sudo shutdown -r now
Проверяем установки моста:
$ sudo brctl show
Должно выдать что-то вроде:
bridge name              bridge id                STP               enabled interfaces
br0                 8000.0016e68e5526             no                       eth0

Создаем первую виртуальную машину:

Для примера создадим виртуальную машину с системой FreeBSD 10, 2GB RAM, 2 CPU и 40GB дисковой памяти:
$ cd /var/lib/libvirt/boot/
$ sudo wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.3/FreeBSD-10.3-RELEASE-amd64-disc1.iso
$ sudo virt-install
--virt-type=kvm
--name freebsd
--ram 2048
--vcpus=2
--os-variant=freebsd10.0
--virt-type=kvm
--hvm
--cdrom=/var/lib/libvirt/boot/FreeBSD-10.3-RELEASE-amd64-disc1.iso
--network=bridge=br0,model=virtio
--graphics vnc
--disk path=/var/lib/libvirt/images/freebsd10.qcow2,size=40,bus=virtio,format=qcow2
Здесь виртуальная машина у нас называется freebsd. Посмотрим, какой порт слушает VNC сервер на нашей виртуальной машине:
$ sudo virsh dumpxml freebsd | grep vnc
<graphics type='vnc' port='5903' autoport='yes' listen='127.0.0.1'>
Например порт  5903. На клиентской машине открываем SSH туннель к freebsd:
$ ssh somebody@server.biz -L 5903:127.0.0.1:5903
После того, как ssh туннель настроен запускаем VNC клиент на свой адрес 127.0.0.1 (localhost) и порт 5903 для продолжения установки  OpenBSD.

Напоследок – несколько полезных команд KVM/VIRSH:

Список доступных версий операционных систем

$ osinfo-query os | less
$ osinfo-query os | grep debian
$ osinfo-query os | grep freebsd

Получить список работающих vms/domains

$ sudo virsh list

Остановка vm/domain с именем openbsd

$ sudo virsh shutdown openbsd

Запуск vm/domain с именем openbsd

$ sudo virsh start openbsd

Приостановить vm/domain с именем openbsd

$ sudo virsh suspend openbsd

Корректно перезагрузить vm/domain с именем openbsd

$ sudo virsh reboot openbsd

Жесткий сброс vm/domain с именем openbsd

$ sudo virsh reset openbsd

Деактивировать/удалить vm/domain с именем openbsd

$ sudo virsh undefine openbsd
$ sudo virsh destroy openbsd

Посмотреть полный набор команд virsh

$ virsh help | less
$ virsh help | grep reboot

Установка гипервизора KVM в Ubuntu 14.04

В настоящее время в Ubuntu офицально поддерживается только гипервизор KVM (http://www.linux-kvm.org). Этот гипервизор является частью кода ядра операционной системы.
В качестве инструментария управления используется библиотека Libvirt, включающая в себя набор программного API и пользовательских приложений управления виртуальными машинами.
Несомненное достоинство — в качестве гостевых можно запускать Linux, *BSD, Windows, Solaris, Mac OS X и ряд других ОС. Гостевые системы ограничены фактически ресурсами сервера, каждая может иметь до 16 vCPU.
По возможности мы стараемся использовать именно этот гипервизор. До сих пор никаких нареканий на него не было.
В отличие от Xen, KVM не поддерживает паравиртуализацию, то есть, требует поддержку аппаратной виртуализации Intel VT или AMD V. Проверить поддерживает ли процессор эту технологию можно выполнив команду в терминале:
kvm-ok
Распространяется он по лицензии GNU GPL.
Для настройки виртуальных машин используется псевдоустройство /dev/kvm. Все инструкции выполняются в специальном гостевом режиме, в полностью изолированном от системы и друг от друга адресном пространстве.
Для хост-машины рекомендуется использовать 64-битную ОС. Это позволит:
  • Устанавливать в качестве гостевых 64-битные системы
  • Выделять гостевым системам более 2 Гбайт ОЗУ
По опыту — если в качестве гостевой используется Linux, то лучше выбрать такой же дистрибутив, как и базовая система. Производительность и стабильность работы будут заметно выше.
Удобно, что KVM поддерживает vmdk-образы, созданные в VMWare, процесс переноса очень прост.
Так как KVM функционирует совместно с доработанными модулями QEMU (оба проекта тесно связаны друг с другом), то принципы управления (в частности, создания образов) остались те же.
В Ubuntu KVM находится в репозитории и устанавливается:
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
Управление осуществляется при помощи фронт-энда virt-manager или утилит командной строки qemu. Virt-manager ставится из репозитория:
sudo apt-get install virt-manager
В качестве альтернативных менеджеров можно использовать ConVirt (Xen/KVM) — http://www.convirture.com/. В репозитории Ubuntu его нет, но ставится просто — на сайте подробная инструкция по установке.
В качестве формата образа гостевой ОС лучше использовать qcow2. Он поддерживает снапшоты, шифрование и сжатие. Его необходимо создавать до того, как создать новую гостевую систему либо с консоли:
qemu-img create -o preallocation=metadata -f qcow2 имя_образа.img 40G
либо из графической оболочки.

Удаляем мост по умолчанию virbr0

После установки KVM в Ubuntu и настройки своего моста в системе остается мост по умолчанию – virbr0. По ifconfig можно увидеть:
 virbr0    Link encap:Ethernet  HWaddr a2:17:ea:e3:47:7e  
      inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
Деактивация моста virbr
sudo ip link set dev virbr0 down
с последующим его удалением
sudo brctl delbr virbr0
ничего не дает – после перезагрузки он появляется снова.
Полностью удалить virbr0 можно командами virsh:
sudo virsh net-destroy default
sudo virsh net-undefine default
И перестартовать сервис libvirtd:
service libvirtd restart
а лучше – перегрузить систему. Все, мост удален и после перезагрузки ifconfig его не покажет.