Рассмотрим основные моменты по работе с замечательной программой Conky которая позволяет выводить на рабочий стол любые параметры вашей системы показывая все процессы компьютера в реальном времени. Универсальная настройка для любой OC Linux.
Вступление
Удобное и информативное отображение параметров системы и особенно отображение тех параметров которые мне хочется видеть была одной из моих главных пожеланий при настройке любой системы. Первое время я пытался добавлять на панели разные аплеты с выводом информации, но все это не совсем удобно. Когда первый раз познакомился с Сonky мне было не удобно настраивать его и каждый раз при переустановке системы лезть в настройки и настраивать. К моей радости один из пользователей Calculate Linux, который регулярно выкладывает свои сборки, в сборку добавляет свой подход к настройкам Conky его то я и взял за основу.
Установка Conky
Пакет присутствует во всех дистрибутивах и называется conky. Назову лишь команды установки в некоторых системах.
Calculate Linux или Gentoo:
emerge conky
Debian
apt-get install conky
CentOS
yum install conky
Управление Conky
Для запуска достаточно запустить в консоли из под пользователя команду и на рабочем столе появится базовая версия отображения параметров:
conky
Все параметры берутся и файла настроек по умолчанию и вряд ли кого устроят. Вот так выглядят базовые настройки на моем рабочем столе:
Вся настройка производится редактирование одного файла conkyrc который в разных версиях может быть в разных местах.
Остановить можно командой из под пользователя:
killall conky
Удобный подход к работе с Conky
Самый удобный для меня подход оказался когда в папке лежит и файл настройки и шрифты что используются а так же скрипт запуска программы который я просто добавляю в автозагрузку системы.
Вот то что я делаю при установке новой системы для удобной работы с Conky:
Ложу папку my_conky туда куда мне удобно,
Папку со шрифтами копирую в папку /usr/share/fonts/,
Добавляю в автозагрузку файл start-conky.sh в котором прописаны параметры запуска.
Файл необходимо сделать запускаемым. В консоли команда: chmod +x /путь до/start-conky.sh
Настройка сводится к тому что я открываю файл conkyrc в текстовом редакторе и редактирую его. После сохранения файла вы сразу уведите результат своих настроек без перезагрузки сервиса.
Мой далеко не идеальный вариант настройки вы можете скачать по ссылке и отредактировать параметры под все свои требования.
Файл настроек Conky
Варианты и команды настроек я не буду указывать их вы всегда сможете найти в интернете с избытком как в примерах кода так и в разных инструкциях. Для работы с настройкой отображения картинок необходимо открывать шрифт и посмотреть необходимый код нужного элемента. Для работы с графическими шрифтами я использую программу FontForge.
Вот мой файл настроек который вы можете увидеть в скаченном архиве:
###############################
# Настройки Алексея Долотова #
# для сайта sevo44.ru #
###############################
update_interval 1
total_run_times 0
net_avg_samples 1
cpu_avg_samples 1
if_up_strictness link
# imlib_cache_size 0
double_buffer yes
no_buffers yes
format_human_readable
#######################
# Текстовые настройки #
#######################
use_xft yes
xftfont Ubuntu:size=8
override_utf8_locale yes
text_buffer_size 2048
#####################
# Оконная специфика #
#####################
own_window_class Conky
own_window yes
#own_window_type conky
own_window_argb_visual yes
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
border_inner_margin 4
border_outer_margin 1
alignment top_right
gap_x 15
gap_y 15
minimum_size 182 700
maximum_width 182
default_bar_size 60 8
# use_xft yes
# xftfont caviar dreams:size=8
# xftalpha 0.5
# uppercase no
#########################
# Графические настройки #
#########################
# draw_outline no
draw_borders no
draw_graph_borders no
draw_shades yes
default_color cccccc
color0 D3D2D5
color1 77507b
color2 F2F2F2
color3 5C3566
######################################
# Начало кода вывода после кода TEXT #
######################################
TEXT
###########
# Система #
###########
!!! Часть кода скрыл. Все увидите в скаченном архиве my_conky !!!
#########
# Конец #
#########
Вот так выглядят мои настройки на рабочем столе:
Под моим контролем всегда:
Состояние работы процессора,
Загруженность памяти и какие ресурсы кушают больше всего,
Какие приложения занимают ресурсы процессора,
Информация о свободном месте на диске,
Результат работа обоих сетевых карт, проводной и wi-fi,
Информация о назначенных IP адресах.
Результат
При таком варианте работы с пакетом Conky все становится понятно и просто как в работе так и в настройках программы. Иметь на рабочем столе все необходимые вам параметры самый удобный способ быть в курсе что происходит в реальном времени с вашим компьютером.
Настроим резервное копирование сервера VDS с помощью утилиты duplicity на операционной системе CentOS 7. Для хранения резервных копий будем использовать Yandex Disk. Бэкапы защитим с помощью надежного шифрования OpenPGP. Возможность автоматического создания архивов.
Введение
В статье «Backup надежный и безопасный» в примере мы рассмотрели как настроить резервное копирование файлов и базы данных сайтов, но для полного спокойствия этого мало. Как правило, ресурсы предоставляющие VDS не делают резервных копий и заботится о безопасности приходится самим владельцам VDS. Мне гораздо спокойней перед любыми действиями с сервером создать полную резервную копию. Сюрпризы после обновления или настройкой могут вывести сервер из работы. Без резервной копии придется потратить много времени и нервов для восстановления работы сервера.
Установим репозиторий Epel без вопросов, если он не был установлен ранее:
yum -y install epel-release
Установим Duplicity без вопросов:
yum -y install duplicity
Создания ключа OpenPGP
Можно хранить резервные копии без шифрования, но мы рассмотрим вариант с защитой. Duplicity использует OpenPGP для шифрования.
Создадим необходимый ключ выполнив команду:
gpg --gen-key
= вывод команды с пояснениями. Часть информации удалена. =
Выберите требуемый тип ключа:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (только для подписи)
(4) RSA (только для подписи)
Ваш выбор (?-подробнее)? 1
ключи RSA могут иметь длину от 1024 до 4096 бит.
Какой размер ключа необходим? (2048)
Запрашиваемый размер ключа 2048 бит
Выберите срок действия ключа.
0 = без ограничения срока действительности
<n> = срок действительности n дней
<n>w = срок действительности n недель
<n>m = срок действительности n месяцев
<n>y = срок действительности n лет
Ключ действителен до? (0)
Ключ не имеет ограничения срока действительности
Все верно? (y/N) y
GnuPG необходимо составить UserID в качестве идентификатора ключа.
Ваше настоящее имя: sevo44
Email-адрес: test@sevo44.ru
Комментарий: duplicity-backup
Вы выбрали следующий User ID:
"sevo44 (duplicity-backup) <test@sevo44.ru>"
Сменить (N)Имя, (C)Комментарий, (E)email-адрес или (O)Принять/(Q)Выход? o
Для защиты секретного ключа необходима фраза-пароль.
!!! Ввводим пароль 2 раза и не забываем его !!!
gpg: ключ 37D34631 помечен как абсолютно доверяемый.
открытый и закрытый ключи созданы и подписаны.
pub 2048R/37D34631 2017-05-08
Отпечаток ключа = 0AFF 9E2E 52DB 7ED2 480D 5DE2 971F 83F8 37D3 4631
uid sevo44 (duplicity-backup) <info@sevo44.ru>
sub 2048R/C5730EC9 2017-05-08
Для создания ключа откройте новый терминал и делайте там любые действия. У меня генерация длилась минут 30.
Вот наш ID ключа 37D34631 который мы и будем использовать.
Обязательно сохраните ключ в надежное место и не забывайте пароль который указывали при создании ключа!
Подключение Yandex disk
Установим необходимый пакет:
yum -y install davfs2
Создадим папку куда будем монтировать:
mkdir /mnt/ydisk_backup_vds
Подключим Yandex Disk:
mount -t davfs https://webdav.yandex.ru /mnt/ydisk_backup_vds/
= вывод команды =
Please enter the username to authenticate with server
https://webdav.yandex.ru or hit enter for none.
Username: test@sevo44.ru
Please enter the password to authenticate user test@sevo44.ru with server
https://webdav.yandex.ru or hit enter for none.
Password: ********
/sbin/mount.davfs: Warning: can't write entry into mtab, but will mount the file system anyway
Для отмантирования диска:
umount /mnt/ydisk_backup_vds
Вводить каждый раз данные не удобно и мы настроим подключение без этих вопросов:
mcedit /etc/davfs2/secrets
= необходимые данные для добавления =
# Данные для подключения к Yandex Disk
/mnt/ydisk_backup_vds/ test@sevo44.ru password
Теперь при подключении не будет запроса логина и пароля.
Cсоздадим папку на сервере куда будем распаковывать из архива:
mkdir /restore
Все подготовительные действия выполнены и можно приступать к работе с сервисом.
Работа с Duplicity
Рассмотрим основные моменты работы с сервисом.
Ручное создание архивов
Можно настроить автоматическое монтирование Yandex Diska при загрузке сервера указав нужные параметры в файл /etc/fstab. Мне кажется это не разумно, но как именно настраивать решать только вам.
Создадим полный архив с помощью ключа и исключим папки не нужные для резервной копии.
Можно указать full для полной резервной копии. Если ничего не указывать то создастся вначале полный архив а последующие будут создаваться incremental.
Имейте в виду, что надо точно указать папку куда создаете резервную копию! Если ошибетесь то создаётся папка что указали.
Внимательно отнеситесь к папкам которые мы исключаем из резервного копирования! Настройте при необходимости под свои требования.
duplicity --encrypt-key=37D34631 --exclude=/restore --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/tmp --exclude=/var/spool --exclude=/var/cache --exclude=/var/tmp --exclude=/swap / file:///mnt/ydisk_backup_vds/backup_vds
= вывод команды =
Локальные и удалённые метаданные синхронизированы, синхронизация не требуется.
Время последней полной резервной копии: нету
Сигнатуры не найдены, переключение на полную резервную копию.
!!!! Процесс не быстрый, ждем !!!!
-------------[ Статистика резервного копирования ]-------------
StartTime 1494264679.29 (Mon May 8 20:31:19 2017)
EndTime 1494264988.55 (Mon May 8 20:36:28 2017)
ElapsedTime 309.26 (5 minutes 9.26 seconds)
SourceFiles 43662
SourceFileSize 1504877467 (1.40 GB)
NewFiles 43662
NewFileSize 1504877467 (1.40 GB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 43662
RawDeltaSize 1481346284 (1.38 GB)
TotalDestinationSizeChange 627905129 (599 MB)
Errors 0
Распакуем все что есть в папку restore:
duplicity --encrypt-key=37D34631 --file-to-restore / file:///mnt/ydisk_backup_vds/backup_vds /restore
= вывод команды =
Локальные и удалённые метаданные синхронизированы, синхронизация не требуется.
Время последней полной резервной копии: Mon May 8 20:42:33 2017
Кодовая фраза GnuPG: тот пароль что указывали при генерации ключа!
После появления строки приглашения консоли проверяем папку restore.
Если необходимо выдернуть из архива только определенные папки или файлы необходимо выполнить команду ( в нашем случае мы распаковали папки etc):
Немного автоматизируем процесс работы с сервисом. Напишем скрипт который выполнит монтирование Yandex Disk, произведёт резервное копирование и отключать диск.
Создадим скрипты для бэкапа и восстановления в папку restore.
Есть команда для просмотра файлов в архиве но смысла выводить эту портянку просто нет. Гораздо быстрей восстановить все что надо в папку restore и спокойно с ней работать.
Результат
Данная утилита очень гибкая в настройке и позволяет использовать её в разных вариантах. Существуют готовые скрипты автоматизации управления которые у меня не получилось настроить да и незачем усложнять то что не надо. Шифрование архивов еще никому не вредило и сервис делает это просто и понятно.
Используя ProFTPd настроим доступ по FTP к сайтам на сервере VDS под управлением CentOS 7. Создадим файловую базу пользователей для авторизации с правами от Nginx. Применим подключение с использованием сертификата для TLS.
Введение
Периодически возникает необходимость давать доступ к файлам сайта для веб разработчиков или других пользователей. Так как используется VDS сервер с настроенным функционалом на базе Nginx, то все права на файлы при добавлении и изменении должны быть как у указанного сервиса. Вначале пытался настроить vsftpd но функционал позволяет настроить только права на редактируемые файлы чтобы они оставались такие как были но вот все новые были с правами пользователя. Поэтапно опишу все действия которые привели меня к желаемому результату.
firewall-cmd --permanent --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ftp ssh
ports: 49000-55000/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
Установка и настройка ProFTPd
Установим сервер ftp:
yum install proftpd proftpd-utils
Создание файловой базы пользователей ProFTPd
Узнаем ID пользователя и группы Nginx, так как именно под этими данными и должны работать наши пользователи:
cat /etc/passwd
= вывод команды. Необходимая информация =
nginx:x:996:994:nginx user:/var/cache/nginx:/sbin/nologin
Создадим файл /etc/ftpd.passwd и добавим туда пользователя sevo44 c id пользователя 996 uid и группой 994 gid и домашним каталогом /web/sites/sevo44.ru/www
ftpasswd --passwd --file=/etc/ftpd.passwd --name=sevo44 --uid=996 --gid=994 --home=/web/sites/sevo44.ru/www --shell=/bin/false
= вывод команды =
ftpasswd: using alternate file: /etc/ftpd.passwd
ftpasswd: creating passwd entry for user sevo44
ftpasswd: /bin/false is not among the valid system shells. Use of
ftpasswd: "RequireValidShell off" may be required, and the PAM
ftpasswd: module configuration may need to be adjusted.
Password: -- вводим пароль
Re-type password: -- повторяем пароль
ftpasswd: entry created
Откроем и посмотрим файл базы пользователей:
cat /etc/ftpd.passwd
= вывод команды =
sevo44:$1$HpmDikdn$.3vuwu56cjTvdg8qtrsy//:996:994::/web/sites/sevo44.ru/www:/bin/false
Видим нашего добавленного пользователя. Для удаления пользователя достаточно закоментировать или удалить строку.
Сменить пароль можно выполнив команду:
ftpasswd --passwd --name=sevo44 --change-password
Включение Ban листа и возможность подключения по TLS
Включим необходимые значения указные в главном файле конфигурации сервиса:
mcedit /etc/sysconfig/proftpd
= Необходимая информация для размещения =
PROFTPD_OPTIONS="-DDYNAMIC_BAN_LISTS -DTLS"
Если параметр -DTLS включен то без наличия правильно созданного сертификата сервис не стартует. В случае работы без TLS просто не указывайте параметр.
Получение сертификата для TLS подключения
Для работы по TLS необходимо создать сертификат. Создадим сертификат на 365 дней:
openssl req -new -x509 -days 365 -nodes -out \
/etc/pki/tls/certs/proftpd.sert.pem -keyout \
/etc/pki/tls/certs/proftpd.key.pem
= вывод команды с пояснениями =
Generating a 2048 bit RSA private key
................................+++
.........+++
writing new private key to '/etc/pki/tls/certs/proftpd.key.pem' -- Путь где будет находится ключ
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:RU -- Буквенный код Страны
State or Province Name (full name) []:Kostroma state -- Область проживания
Locality Name (eg, city) [Default City]:Kostroma -- Город
Organization Name (eg, company) [Default Company Ltd]:SEVO44 -- Название организации
Organizational Unit Name (eg, section) []: -- Название отдела в организации
Common Name (eg, your name or your server's hostname) []:sevo44.ru -- Доменное имя сервера
Email Address []:info@sevo44.ru -- адрес электронной почты
После получения перейдите в папку указанную в пути и убедитесь что сертификаты созданы и имеют не нулевой размер! При настройке я неправильно указывал команду создания сертификата и они создавались с нулевым размером.
Редактирование proftpd.conf
Файл хорошо задокументирован и имеет большое количество настроек. В файле будут указанны параметры которые необходимы для наших требований.
Сделаем оригинал копии и откроем главный файл настройки сервиса:
cp /etc/proftpd.conf /etc/proftpd.conf.orig
mcedit /etc/proftpd.conf
= вывод команды с необходимыми комментариями =
ServerName "FTP server"
ServerIdent on "FTP Server ready."
ServerAdmin root@localhost
DefaultServer on
# По умолчанию используется 21 в случае замены используйте параметр ниже
# Внимание! Не забудьте дать доступ!
#Port 21111
# Изолировать каждого пользователя FTP, в своем домашнем каталоге
DefaultRoot ~
# Отключили и добавили строки для того чтобы шла авторизация только пользователей с файла /etc/ftpd.passwd
#AuthPAMConfig proftpd
#AuthOrder mod_auth_pam.c* mod_auth_unix.c
AuthOrder mod_auth_file.c
#Модуль авторизации по файлу грузится сам и включать его не надо
#LoadModule mod_auth_file.c
AuthUserFile /etc/ftpd.passwd
RequireValidShell off
AuthPAM off
#RootLogin off
#Диапазон пассивных портов необходимых для работы
PassivePorts 49000 55000
# Не делать обратного DNS-запроса
UseReverseDNS off
# Для предотвращения DOS-атак, установить максимальное количество дочерних процессов
# до 20. Если вам нужно, чтобы позволить более 20 одновременных подключений
# на один раз, просто увеличьте это значение. Обратите внимание, что это работает только
# в автономном режиме, в то inetd режим следует использовать в inetd сервера
# что позволяет ограничить максимальное количество процессов на обслуживание
# (например, xinetd)
MaxInstances 20
# Отключить функция sendfile по умолчанию, так как это нарушает отображение скорости загрузки в
# ftptop и ftpwho
UseSendfile off
# Настройки видов записи и типы логирования
# Define the log formats
LogFormat default "%h %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
ExtendedLog /var/log/proftpd/all.log ALL default
ExtendedLog /var/log/proftpd/access.log READ,WRITE default
ExtendedLog /var/log/proftpd/auth.log AUTH auth
ServerLog /var/log/proftpd/server.log
SystemLog /var/log/proftpd/system.log
TransferLog /var/log/proftpd/transfer.log
DebugLevel 9
# Обеспечить внешнюю кэш SSL-сессии с использованием разделяемой памяти
# (contrib/mod_tls_shmcache.html)
LoadModule mod_tls_shmcache.c
# TLS
#LoadModule mod_tls.c
<IfDefine TLS>
TLSEngine on
# В случае ON подключиться можно только по TLS
TLSRequired on
TLSRSACertificateFile /etc/pki/tls/certs/proftpd.sert.pem
TLSRSACertificateKeyFile /etc/pki/tls/certs/proftpd.key.pem
TLSCipherSuite ALL:!ADH:!DES
TLSOptions NoCertRequest
TLSVerifyClient off
#TLSRenegotiate ctrl 3600 data 512000 required off timeout 300
TLSLog /var/log/proftpd/tls.log
<IfModule mod_tls_shmcache.c>
TLSSessionCache shm:/file=/var/run/proftpd/sesscache
</IfModule>
</IfDefine>
# Динамические списки блокировки
# Включение параметром PROFTPD_OPTIONS=-DDYNAMIC_BAN_LISTS
#в /etc/sysconfig/proftpd
<IfDefine DYNAMIC_BAN_LISTS>
LoadModule mod_ban.c
BanEngine on
BanLog /var/log/proftpd/ban.log
BanTable /var/run/proftpd/ban.tab
# Если же клиент достигает предела MaxLoginAttempts 2 раза
# в течение 10 минут, автоматически добавить запрет для клиента, что
# истекает через один час.
BanOnEvent MaxLoginAttempts 2/00:10:00 01:00:00
# Информировать пользователя о том, что он попал в бан
BanMessage "Машина %a иннна для доступа по FTP"
# Разрешить FTP и админ вручную добавить/удалить щелбаны
BanControlsACLs all allow user ftpadm
</IfDefine>
# Установить сетевые специфические "качества обслуживания" (QoS) и биты на пакеты, используемые
# на сервере (contrib/mod_qos.html)
<IfDefine QOS>
LoadModule mod_qos.c
# RFC791 TOS parameter compatibility
QoSOptions dataqos throughput ctrlqos lowdelay
# For a DSCP environment (may require tweaking)
#QoSOptions dataqos CS2 ctrlqos AF41
</IfDefine>
# Глобальной конфигурации - конфигурации, общие для Настройки сервера и виртуальных Хостов
<Global>
#Значение umask 022-хороший стандарт umask, чтобы предотвратить новые каталоги и файлы
# от группы и для
Umask 022
# Разрешить пользователям перезаписать файлы, а также изменять разрешения
AllowOverwrite yes
<Limit ALL SITE_CHMOD>
AllowAll
</Limit>
</Global>
Управление сервером ProFTPd
Добавим в автозагрузку и запустим:
systemctl enable proftpd
systemctl start proftpd
Проверим статус:
systemctl status proftpd
● prоftpd.service - PrоFTPD FTP Server
Loaded: loaded (/usr/lib/systemd/system/prоftpd.service; enabled; vendor preset: disabled)
Active: active (running) since Вт 2017-04-25 21:18:12 MSK; 4min 24s ago
Main PID: 23220 (prоftpd)
CGroup: /system.slice/prоftpd.service
└─23220 prоftpd: (accepting connections)
апр 25 21:18:12 centos7.sevo44.loc systemd[1]: Starting PrоFTPD FTP Server...
апр 25 21:18:12 centos7.sevo44.loc systemd[1]: Started PrоFTPD FTP Server.
В консоли можно вывести просмотр онлайн статистики выполнив команду:
ftptop
Просмотр количества подключений выполняется командой:
ftpwho
Логи сервиса
Все логи вы можете посмотреть в папке /var/log/proftpd. Ротация логов работает но вы можете это проверить и настроить на примере раздела «Ротация логов сайта» в статье » Virtual Hosts на web-сервере NGINX»
Подключение по FTP c использованием TLS
Для подключения я использую программу FileZilla и приведу скриншоты настройки моего подключения.
Настройка:
Информация TLS:
Вывод
Произведя данную настройку мы полностью сделали разграничение доступа к разным сайтам на сервере. Обеспечили надежное подключение используя сертификат и ведение всей статистики работы с файлами.
При переходе на нового провайдера обнаружил отсутствие доступа к репозиторию WebtaticEL. Роскомнадзор распорядился заблокировать ip адрес webtatic.com c 10.03.2017по инициативе ФНС. Вопрос решён и Россия может дальше пользоваться популярными репозиторием CentOS 7.
Введение
Репозиторий WebtaticEL один из самых востребованных при работе с операционной системой CentOS. Ресурс, как выяснилось, был заблокирован не у всех. О результат моих попыток получить доступ к ресурсу я и расскажу.
Определение блокировки WebtaticEL
Вот так выглядел вывод запроса к ресурсу:
ping -R webtatic.com
= вывод результата =
PING webtatic.com (104.24.6.38) 56(124) bytes of data.
64 bytes from 104.24.6.38: icmp_seq=1 ttl=57 time=16.8 ms
RR: hp.sevo44.loc (192.168.0.3)
192.168.1.106
access-46-228-96-223.kmtn.ru (46.228.96.223)
access-46-42-0-10.kmtn.ru (46.42.0.10)
kmtn.inet2.net (85.112.122.60)
ttk.inet2.net (85.112.122.11)
172.68.8.1
104.24.6.38
104.24.6.38
64 bytes from 104.24.6.38: icmp_seq=2 ttl=57 time=32.7 ms (same route)
64 bytes from 104.24.6.38: icmp_seq=3 ttl=57 time=33.0 ms (same route)
64 bytes from 104.24.6.38: icmp_seq=4 ttl=57 time=19.4 ms (same route)
64 bytes from 104.24.6.38: icmp_seq=5 ttl=57 time=24.0 ms (same route)
64 bytes from 104.24.6.38: icmp_seq=6 ttl=57 time=24.9 ms (same route)
64 bytes from 104.24.6.38: icmp_seq=7 ttl=57 time=23.3 ms (same route)
64 bytes from 104.24.6.38: icmp_seq=8 ttl=57 time=30.6 ms (same route)
64 bytes from 104.24.6.38: icmp_seq=9 ttl=57 time=21.2 ms (same route)
64 bytes from 104.24.6.38: icmp_seq=10 ttl=57 time=26.5 ms (same route)
^C
--- webtatic.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9014ms
rtt min/avg/max/mdev = 16.870/25.288/33.085/5.227 ms
ping webtatic.com
= вывод результата =
PING webtatic.com (104.24.6.38) 56(84) bytes of data.
From Filter-gw.transtelecom.net (188.43.30.34) icmp_seq=1 Destination Host Unreachable
From Filter-gw.transtelecom.net (188.43.30.34) icmp_seq=2 Destination Host Unreachable
From Filter-gw.transtelecom.net (188.43.30.34) icmp_seq=3 Destination Host Unreachable
From Filter-gw.transtelecom.net (188.43.30.34) icmp_seq=4 Destination Host Unreachable
From Filter-gw.transtelecom.net (188.43.30.34) icmp_seq=5 Destination Host Unreachable
From Filter-gw.transtelecom.net (188.43.30.34) icmp_seq=6 Destination Host Unreachable
From Filter-gw.transtelecom.net (188.43.30.34) icmp_seq=7 Destination Host Unreachable
^C
--- webtatic.com ping statistics ---
7 packets transmitted, 0 received, +7 errors, 100% packet loss, time
6010ms
Как видите срабатывает фильтр gw.transtelecom.net который и блокирует сайт.
Попытки получить доступ к WebtaticEL
После небольшой игры в футбол с провайдерами я получил ответ:
«104.24.6.38 заблокирован Роскомнадзором, тут уже ничего не поделать.»
Верить на слово я уже давно перестал.
Воспользовавшись сайтом https://rkn.gov.ru/ написал запрос разъяснить мне ситуацию с заблокированным ресурсом. Запрос отправил 14 апреля 2017 года. Наверно действие было поспешно так как можно было сразу проверить самому сайт на наличие блокировки но тут наверно больше был вопрос почему не у всех блокируется.
Параллельно написал письмо на почтовый адрес andy@webtatic.com с информацией о блокировке ресурса в России.
Результат
В понедельник 17 апреля получаю письмо о регистрации моего вопроса в Роскомнадзоре и письма с вопросом о работе ресурса от моего провайдера.
Проверяю:
ping webtatic.com= вывод команды =
PING webtatic.com (138.197.226.254) 56(84) bytes of data.64 bytes from 138.197.226.254: icmp_seq=1 ttl=53 time=129 ms64 bytes from 138.197.226.254: icmp_seq=2 ttl=53 time=123 ms^C64 bytes from 138.197.226.254: icmp_seq=5 ttl=53 time=130 ms--- webtatic.com ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 4394msrtt min/avg/max/mdev = 123.217/126.370/130.193/2.996 ms
Ресурс Webtatic.com стал доступен.
Вначале я подумал провайдеры произвели какие то действия и ресурс стал доступен, но выяснилось действия предпринял сам WebtaticEL.
Информация WebtaticEL о блокировке в России
Вот перевод статьи опубликованной на webtatic.com 16 апреля 2017 года:
Россия заблокировала доступ (косвенно), сейчас исправлено
В конце прошлого месяца в России начали блокировать Webtatic.com косвенно из-за сторонних онлайн-Валюта сайта, выступающей с одного IP-адреса.
Это сказалось на https://webtatic.com и https://mirror.webtatic.com/ сайты.
Это было связано в cloudflare (услугу cdn), которая, как это и что онлайн-Валюта сайта с помощью обмена IP-адресов через это бесплатный и профессиональный подписки между клиентами. Полный запрет был применен к IP-адресу заблокировать сайт нарушителя.
К сожалению, на cloudflare не удалось решить проблему, и Webtatic был не в состоянии получить новые разблокировали IP-адреса из них.
Благодаря этому, Webtatic больше не использовать сети cdn от cloudflare, а вместо этого перейдет на хостинг сайта в нескольких центрах обработки данных (в качестве репозиториев yum тоже себе сделать).
Posted on Author Andy ThompsonCategories Yum Repository
Видим что блокировка наступила с 10 марта 2017 года и доступ должен быть закрыт всеми провайдерами, что и вызывало моё недоумение.
Почему заблокировали ip адрес а не сам ресурс? Да, оказался на одном сервере с Webtatic.com «не хороший» ресурс и что… Даже написано «ограничивается к сайту», но ip это не сайт. Они к себе такой подход применяли бы… накосячил один и всех в отставку 🙂
Сейчас ресурс Webtatic.com работает на ip 138.197.226.254 который не заблокирован в РКН.
Ответ Роскомнадзора о блокировке webtatic.com
Вот официальное письмо полученное в ответ на мой запрос:
РОСКОМНАДЗОР
УПРАВЛЕНИЕ ФЕДЕРАЛЬНОЙ СЛУЖБЫ
ПО НАДЗОРУ В СФЕРЕ СВЯЗИ, ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И МАССОВЫХ КОММУНИКАЦИЙ
ПО КОСТРОМСКОЙ ОБЛАСТИ
(Управление Роскомнадзора
по Костромской области)
мкр. Паново, д.36, г.Кострома, 156010
Справочная: (4942) 64 10 41; факс (4942) 64 10 51
E—mail: rsockanc44@rkn.gov.ru
17.04.2017 № 1444-01/44
На № от
О рассмотрении обращения
Долотову А.Н.
Эл. почта: dolotov44@yandex.ru
Уважаемый Алексей Николаевич!
Ваше обращение по вопросу блокировки интернет сайта по адресу https://webtatic.com поступившее в Управление Роскомнадзора по Костромской области с официального сайта Роскомнадзора 17.04.2017 (ID 1061561), рассмотрено.
С 1 ноября 2012 г. вступила в силу статья 15.1 Федерального закона от 27 июля 2006 г. № 149-ФЗ «Об информации, информационных технологиях и о защите информации», касающаяся создания, формирования и ведения Единого реестра доменных имен, указателей страниц сайтов в сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространение которой в Российской Федерации запрещено (далее – Реестр запрещенных сайтов).
Получение доступа к полной выгрузке из Реестра запрещенных сайтов предоставляется операторам связи исключительно с использованием квалифицированной электронной подписи, выданной любым удостоверяющим центром, из числа аккредитованных Минкомсвязи России.
Данные о нахождении доменных имен, указателей страниц сайтов в сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространение которой в Российской Федерации запрещено, в Реестре запрещенных сайтов можно получить через электронную форму, опубликованную по адресу http://eais.rkn.gov.ru
Для проверки ограничения доступа к сайтам и (или) страницам сайтов сети «Интернет» в рамках исполнения иных положений Федерального закона от 27.07.2006 года № 149-ФЗ «Об информации, информационных технологиях и защите информации», рекомендуем воспользоватьсяуниверсальным сервисом проверки ограничения доступа расположенному по адресу http://blocklist.rkn.gov.ru
В Реестре запрещенных сайтов действительно существует запись с ip‑адресом 104.24.6.38 , который совпадал с адресом хостинга сайта webtatic.com.
На данный момент сайтом webtatic.com приняты меры по устранения негативных последствий от блокировки стороннего ресурса.
Сайт изменил ip адрес хостинга (ip‑адрес 138.197.226.254) и организовал копию сайта доступного по ссылке https://mirror.webtatic.com/ (ip‑адрес 45.55.104.9).
Если сайт webtatic.com у Вас до сих пор недоступен, прошу обратиться в тех. поддержку оператора связи, а в случае непринятия мер по возобновлению доступа направить в наш адрес информацию об этом и договор на оказание телематических услуг связи с оператором связи для принятия к нему административных мер воздействия.
Данное решение, действие (бездействие) Вы вправе оспорить непосредственно в суде или в вышестоящем в порядке подчиненности органе государственной власти.
С уважением,
Руководитель
Документ подписан электронной подписью в системе электронного документооборота Роскомнадзора
СВЕДЕНИЯ О СЕРТИФИКАТЕ ЭП
Кому выдан:
Управление Роскомнадзора по Костромской области
Серийный№:
508663092886826981208179
Кем выдан:
ООО Спецоператор
Срок действия
01.06.2016 — 01.06.2017
С. Л. Корольков
Всё понятно. Осталось уточнить в каких случаях блокируют домен а в каких ip адрес. В каком документе указаны эти правила?
Вывод
В результате всех действий я удовлетворен возможностью опять пользоваться репозиторием WebtaticEL. Повлияло мое письмо в webtatic.com на решение проблемы или нет — не важно. Россия может дальше работать с этим ресурсом — это главное. Можно было послушать провайдера и подождать пока само всё разрешится. Возможно и разрешилось бы без моего участия, а возможно и нет, тут мы не узнаем ответ.
Получим и настроим автоматическое обновление бесплатного сертификата SSL для сайта от компании Lets`Encrypt. Срок сертификата 90 дней. Настроить получение сертификатов возможно на любой операционной системе Linux. Стабильная и удобная работа с сервисом.
Введение
С января 2017 года Firefox и Chrome маркируют как надежные только сайты с SSL-сертификатами. Это одна из причин по которой следует использовать этот сертификат.
Если коротко, то это защита сайта которая многим не нужна, но введение некоторых ограничений заставляет использовать её. Хорошо что есть ресурсы которые предоставляют сертификаты бесплатно, сколько времени еще так будет не известно, но мы пока попользуемся.
Мной было найдено два ресурса выдающие бесплатные SSL для сайтов:
StartCom — у этого ресурса проблемы с разработчиками браузеров и чем все это закончится не понятно. Удобно что выдается на 3 года и можно установить на любой обычный хостинг.
Let’s Encrypt is — все работает и никаких проблем нет. Для установки нужен свой VDS хостинг. Хоть сертификат и выдается на 90 дней, но при настройке автоматического обновления никаких проблем не возникает.
Мой выбор однозначно пал на второй вариант, так как стабильность и понятность для меня самое важное.
Разработчик рекомендует использовать пакетную систему Snap. Ее смысл заключается в том, что в пакет с приложением входит полный набор компонентов, необходимых для запуска данного приложения. Такие пакеты можно устанавливать в систему не заботясь о зависимостях, так как все зависимости уже включены в пакет. Пакетная система Snap была созданная компанией Canonical и изначально появилась в дистрибутиве Ubuntu Linux.
При установке на дистрибутивы которые используют не стабильные репозитории это очень оправдано и понятно почему. В нашем случае устанавливать в таком виде не имеет смысла. Лично у меня на протяжении лет 5 проблем не возникало.
Для использования Certbot, необходимо сначала добавить репозиторий Epel . Подключим необходимый репозиторий:
dnf -y install epel-release
Установим без вопросов Certbot от Let’s Encrypt:
yum -y install certbot
Предварительная подготовка
Предварительная подготовка заключается в выполнении двух действий:
Ответы на вопросы от разработчика;
Вносим необходимые настройки в конфигурацию Nginx.
Подробно про установку и начальную настройку сервера вы можете узнать в моей статье NGINX установка и настройка.
Ответы на вопросы от разработчика
Запускаем получение сертификата, но получать его не будем. Необходимо ответить на несколько вопросов от разработчика:
certbot certonly
= вывод команды =
Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2Enter email address (used for urgent renewal and security notices)
= в случае проблем с получением сертификата на эту почту будут приходить сообщения == можно указать выдуманный =(Enter 'c' to cancel): info@sevo44.ru
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
= подтверждаем что ознакомились с условиями предоставления услуг =
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
= Просят поделиться своим адресом электронной почты с Фондом Electronic Frontier,партнером-основателем проекта Let's Encrypt и некоммерческой организацией, котораяразрабатывает Certbot. Отказываюсь. =
(Y)es/(N)o: N
Account registered.
= Выходим по Ctrl + C =
В данном примере есть два варианта получения сертификата. Расскажу грубо о каждом варианте и поясню разницу:
Spin up a temporary webserver (standalone) — при таком варианте сертификат будет получен с использованием тестового сервера разработчика. Этот вариант подходит при условии что сайт уже где то работает и нам его надо перенести. После переезда нам надо заходить в настройки получения сертификата и менять параметры. Мне такой вариант не нравится и ниже вы узнаете почему;
Place files in webroot directory (webroot) — при этом варианте сервис проверяет доступ к серверу и если он есть выдает сертификат. Основное преимущество данного вида в том что мне не надо в последствии править настройки получения сертификата. Достаточно с работающего сервера взять действующие сертификаты положить их в свое место и прописать пути в настройках Nginx. После реального переезда сайта достаточно получить сертификаты и указать в настройках Nginx новые пути.
Вносим необходимые настройки в конфигурацию Nginx
В конфигурации Nginx для сайта должны быть добавлены следующие строки:
Можно для каждого сайта указывать свою директорию, но мне это не нравится. Предпочитаю делать общую.
При настройке Nginx для работы сайтов с использованием сертификатов есть два варианта:
Внести все основные настройки для работы сайта с сертификатом в главный файл настройки Nginx а в настройках для самого сайта указывать только пути для сертификата;
Не трогать главный файл и все настройки прописывать в настройках для сайта.
Лично я предпочитаю первый вариант и именно он будет описан ниже.
Вот пример моего файла настроек главного конфигурационного файла Nginx:
В этом файле два блока server. Первый отвечающий за работы http мы закомментировали, второй отвечающий за https перевели на работу по http и закомментировали пути к сертификату.
Обязательно проверяем правильность настроек Nginx и применяем обновления:
nginx -t
= вывод при успешной настройке =
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s reload
Все предварительные подготовки сделаны. Переходим к непосредственному получению сертификата.
Не знаю какие ограничения на установку, но я спокойно установил SSL сертификат на домен и 5 его поддоменов.
Пример получения сертификата SSL:
certbot certonly
= вывод команды с действиями =
Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel):sevo44.ru
Requesting a certificate for sevo44.ru
Input the webroot for sevo44.ru: (Enter 'c' to cancel):/etc/nginx/cert-renewal
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0014_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0014_csr-certbot.pem
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/sevo44.ru/fullchain.pem. Your cert will
expire on 2021-12-14. To obtain a new or tweaked version of this
certificate in the future, simply run certbot again. To
non-interactively renew *all* of your certificates, run "certbot
renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Сертификат успешно получен и указан период его действия.
Получение одного сертификата на домен с WWW и без
При попытке зайти по ссылке https://www.sevo44.ru мы получим сообщение об ошибке сертификата:
curl -I https://www.sevo44.ru
= вывод команды =
curl: (51) SSL: no alternative certificate subject name matches target host name 'www.sevo44.ru'
В настройках DNS для домена обязательно должен быть прописаны параметры его работы по адресу www.sevo44.ru!
Для исправление этой ошибки необходимо получить сертификат на домен с www и без.
Мы разкоментировали все строчки что ранее закомментировали и переключили второй блок на работу по https с указанием путей к сертификатам. Как вы заметил http2 протокол включается простым добавлением этой записи.
Сделаем проверку настроек и обновим настройки Nginx:
nginx -t
nginx -s reload
Ресурсы проверки SSL и Http2 сайта
Проверим сторонними ресурсами как установился наш SSL-сертификат.
SSLReport — сервис проверки SSL но более детальный.
Проверим работу http2 протокола:
HTTP/2 Test — сервис показывающий проверяющий работу http2.
Продление SSL-сертификата
Есть возможность производить обновления в ручную и в автоматическом режиме.
Ручной режим
Проверим автоматическое продление сертификатов, выполнив эту команду:
certbot renew --dry-run
= вывод команды =
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/sevo44.ru.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator webroot, Installer None
Simulating renewal of an existing certificate for sevo44.ru
Performing the following challenges:
http-01 challenge for sevo44.ru
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/sevo44.ru/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/sevo44.ru/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Видим что все хорошо.
Для обновления всех сертификатов достаточно запустить команду:
certbot renew
= вывод команды =
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/sevo44.ru.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal
The following certs are not due for renewal yet:
/etc/letsencrypt/live/sevo44.ru/fullchain.pem (skipped)
No renewals were attempted.
Обновлять ничего.
Автоматический режим
Для автоматического обновления нам необходимо добавить параметры в crontab:
vim /etc/crontab
= необходимое варианты добавление =
# Cert Renewal
# запись в лог файл
30 2 0 * * root /usr/bin/certbot renew --post-hook "nginx -s reload" >> /var/log/letsencrypt/cron-renew.log
=== или ===
# без записи в лог файл
30 2 0 * * root /usr/bin/certbot renew --post-hook "nginx -s reload" >> /dev/null 2>&1
Согласно этой настройке команда будет выполняться по воскресеньям в 2:30 после выполнения произойдёт reload nginx.
Удаление сертификата
Удаление сертификата состоит из двух частей:
Аннулирование сертификатов на серверах Let`s Enscrypt;
Удаление сертификатов на сервере.
Аннулируем сертификат:
certbot revoke --cert-path /etc/letsencrypt/archive/sevo44.ru/cert1.pem
= вывод команды =
Saving debug log to /var/log/letsencrypt/letsencrypt.log
An unexpected error occurred:The client lacks sufficient authorization :: Certificate is expired
Please see the logfiles in /var/log/letsencrypt for more details.
В выводе говориться что сертификат просрочен и удалять нечего.
Удалим сертификат на сервере:
certbot delete --cert-name sevo44.ru
= вывод команды =
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificate(s) are selected for deletion:
* sevo44.ru
Are you sure you want to delete the above certificate(s)?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y - подтверждаем удаление
Deleted all files relating to certificate sevo44.ru.
Принудительное обновление сертификата
Бывает ситуации когда надо принудительно обновить сертификат по разным причинам.
Вот варианты команд которые можно использовать:
= Для принудительного обновления всех сертификатов =
certbot --force-renewal
= Выборочное принудительное обновление сертификатов =
= через запятую указываются все необходимые доменные имена =
certbot --force-renewal -d www.itsecforu.ru,itsecforu.ru
Заключение
Не сразу я пришел к такому механизму настройки получения сертификатов. Мне кажется такой вариант удобен и понятен. Использую эту инструкцию на рабочих серверах. Проблем с автоматическим обновлением сертификатов и программы не возникало.
Если захочется посмотреть более подробно инструкцию выполните команду:
certbot --help
certbot --help all
Например можете отфильтруйте опцию обновления, используя команду grep / egrep:
certbot --help all | grep -i force
certbot --help all | egrep -i 'renewal|force'
Применим удобное и эффективное средство для защиты сайта от подбора паролей с помощью популярного сервиса Fail2ban. Помогает для защиты от ботов и очень любопытных товарищей. Заблокируем назойливых роботов на уровне VDS хостинга.
Введение
Рано или поздно ваш сайт будут пробовать на прочность всякие роботы. Если движок сайта свободный, то роботы начинают проверять вас на прочность сразу.
Все бесплатные движки всегда надо обновлять и внимательно относиться ко всем дополнениям что устанавливайте. Обязательно держите резервные копии и тогда даже взлом не страшен.
Меня начали проверять почти сразу. Пользуясь случаем хочу передать привет товарищу Токарчуку Александру Степановичу с IP адреса которого упорно хотели попасть в админку моего сайта. Почему то пытаются войти, в моем случае, как правило с Украины.
Советую сразу смените путь к админке сайта с помощью iThemes Security. По умолчанию путь в WordPress домен/wp-admin и именно сюда все боты и лезут… Поленился я сразу сменить и боты стали ломится каждую минуту и причем в своем большинстве используя Российские ip адреса. Путь сменил, но они всё равно ломятся по стандартному пути…
Ошибка входа в админку
Для того чтобы понять пытаются к нам войти или нет надо посмотреть логи сайта. Если логи настроены правильно, то вы увидите все действия что происходят с вашим сайтам и ни одно событие не останется без внимания.
Посмотрим как выглядит лог неудачной попытки авторизации на популярном движке WordPress:
Согласно этим строчкам 2 раза неудачно авторизовались.
iThemes Security для WordPress
Для популярного движка WordPress существует свободный плагин iThemes Security для защиты сайта. Не буду останавливаться на рассмотрении настройки, покажу лишь как он показывает ошибки авторизации.
Согласно этих данных видим что регулярно производится по 2 попытки авторизации к административной панели сайта.
При нажатии на ip мы увидим информацию о координатах этого адреса:
У меня как обычно Украина. Нажмем на ISP: PP SKS-Lugan и увидим более детальную информацию:
Можно делать с этой информацией всё что угодно и тут всё в вашей власти.
Моя задача сделать так чтобы данные пользователи блокировались для всего моего VDS хостинга, а не только для сайта работающего на WordPress c защитой iThemes Security. Для этого и надо настроить Fail2ban.
Настройка Fail2ban
Установка
Устанавливать и настраивать будем для системы CentOS 7, хотя и для других систем, с учетом специфики операционной системы, данное описание подойдёт.
Установим:
yum install fail2ban
Конфигурационный файл настройки находится здесь — /etc/fail2ban/jail.conf, но, как сказано в комментариях файла, данный файл рекомендуется не изменять.
Чтобы при обновлении Fail2ban не удалялись наши настройки создадим локальную копию файла, именно с него и будет работать наша система защиты.
Отправка почты на внешний e-mail адрес
Настроим чтобы письма root пересылались на нужную нам внешнюю e-mail почту.
Открываем файл /etc/aliases и внесем изменения:
mcedit /etc/aliases
=необходимые изменения=
# Person who should get root's mail
root:info@sevo44.ru
Применим изменения выполнив команду:
newaliases
Отправим тестовое сообщение выполнив команду:
echo «test» | mail -s Testmail root
Если в выводе будет -bash: mail: команда не найдена то надо установить пакет:
= Для CentOS =
yum install mailx
= Для Debian =
apt-get install mailutils
Если на указанную почту пришло сообщение где в теле письма «test», то значит всё хорошо и теперь все сообщения что система создает для root будут переправлены на вашу почту.
Обязательно проверьте спам почты. Если в спаме нет то смотрите логи отправки почты. Всегда использую почтовый сервис yandex.ru и проблем с ними нет.
В случае если письмо не пришло то надо идти в файл лога и смотреть что там не так. В моем случае лог выглядит так:
cat /var/log/maillog
= вывод команды с необходимыми значениями =
Apr 10 22:57:03 ih378645 postfix/smtp[29844]: D56B64957: to=<info@sevo44.ru>, orig_to=<root>, relay=mx.yandex.ru[87.250.250.89]:25, delay=0.57, delays=0.02/0/0.03/0.52, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued on mxfront10g.mail.yandex.net as 1491854223-b3qP5cuV0Mf-v2CaUBlk)
Работа с почтой Postfix
Перестала приходить почта от f2b о блокировке желающих войти в админку сайта.
Вот количество ip которое стремительно увеличивалось:
В логах обнаружил сообщение о превышении лимита на отправку сообщений:
cat /var/log/maillog
= вывод команды с необходимыми значениями =
May 5 12:48:32 ih378656 postfix/smtp[12576]: 3111D5EE9: to=<dolotov44@yandex.ru>, orig_to=<root@localhost>, relay=mx.yandex.ru[93.158.134.89]:25, conn_use=23, delay=12862, delays=12859/3.1/0.07/0.06, dsn=4.5.1, status=deferred (host mx.yandex.ru[93.158.134.89] said: 451 4.5.1 The recipient <dolotov44@yandex.ru> has exceeded their message rate limit. Try again later. 1493977712-W6SydoLQur-mWE8thiK (in reply to end of DATA command))
May 5 12:48:32 ih378656 postfix/smtp[12563]: 2E9A05F20: host mx.yandex.ru[87.250.250.89] said: 451 4.5.1 The recipient <dolotov44@yandex.ru> has exceeded their message rate limit. Try again later. 1493977712-LwxkdR0eGu-mWD4A8YU (in reply to end of DATA command)
Посмотрим количество сообщений в очереди postfix:
mailq | grep Request
= вывод команды =
-- 5811 Kbytes in 1888 Requests.
Файл настройки большой, поэтому я покажу только настройки что я менял. Откроем файл и внесем нужные исправления и добавления:
mcedit /etc/fail2ban/jail.local
= вывод команды с необходимыми изменениями =
# "bantime" это количество секунд запрета
# 1 week = 604800
bantime = 604800
# Время работы параметра "maxretry"
# seconds.
findtime = 600
# "maxretry" количество попыток до бана
maxretry = 3
#
# ACTIONS
#
# Действия при срабатывании правил.
# Адрес электронной почты получателя
destemail = root@localhost
# Адрес отправителя
sender = f2b
# Выбрать действие по умолчанию. Чтобы изменить, просто переопределить значение 'действие' s
# Всего 3 вида действия
# action_ только запрет
# action_mw запретить и отправить по электронной почте с whois доклад destemail
# action_mwl запретить и отправить по электронной почте с whois отчет и соответствующие строки журнала
action = %(action_mwl)s
# Свои фильтры для защиты
# Название блока используемое при работе с сервисом
[sites-sevo44ru]
# Включение правила
enabled = true
# Какие порты блокируются
port = http,https
# Название файла фильтра
filter = sites-sevo44ru
# Путь до лог файла который анализируется
logpath = /web/sites/sevo44.ru/log/access.log
# Количество неудачных попыток до блокировки
maxretry = 3
# Период блокировки -- вечная. Иногда лучше использовать и такое :)
#bantime = -1
Обращаю особое внимание на строку action = %(action_mwl)s. Если хотите получать оповещения на почту обязательно правильно укажите этот параметр и настройте оповещение на необходимый почтовый ящик.
Мне пришлось отключить отправку сообщений на почту. Про перезагрузке сервиса на почту приходят сообщения о всех заблокированных ip. При большом количестве блокировок почтовый ящик на yandex отказывается их принимать. Если кто может подсказать как решить эту проблему подскажите.
Если укажите чтобы на почту приходила информация с whois докладом в письме можете увидеть missing whois program установите необходимое выполнив команду:
yum install jwhois
Теперь в сообщениях на почту будет приходить детальная информация об ip адресе блокируемого.
Файл фильтра
Создадим файл фильтра в необходимой папке с указанием нужных параметров:
Можно в новой строчке перечислять любые необходимые параметры.
В одном из фильтров я использую код ^<HOST> .*base64_decode который блокирует всех кто пытается использовать эту кодировальную хренодрянь.
Проверим наш фильтр выполнив команду:
fail2ban-regex /web/sites/sevo44.ru/log/access.log /etc/fail2ban/filter.d/sites-sevo44ru.conf
= вывод информации =
Running tests
=============
Use failregex filter file : sites-wpsevo44ru, basedir: /etc/fail2bаn
Use log file : /web/sites/wp.sevo44.ru/log/access.log
Use encoding : UTF-8
Results
=======
Failregex: 309 total
|- #) [# of hits] regular expression
| 1) [309] ^<HOST> .* "POST /wp-login.php
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [77612] Day(?P<_sep>[-/])MON(?P=_sep)Year[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-
Lines: 77612 lines, 0 ignored, 309 matched, 77303 missed
[processed in 16.01 sec]
Missed line(s): too many to print. Use --print-all-missed to print all 77303 lines
Видим что в нашем логе 309 срабатываний правила.
Можно вывести информация обо всех этих строчках:
fail2ban-regex /web/sites/wp.sevo44.ru/log/access.log /etc/fail2ban/filter.d/sites-wpsevo44ru.conf --print-all-matched
= вывод информации =
Running tests
=============
Use failregex filter file : sites-wpsevo44ru, basedir: /etc/fail2ban
Use log file : /web/sites/sevo44.ru/log/access.log
Use encoding : UTF-8
Results
=======
Failregex: 309 total
|- #) [# of hits] regular expression
| 1) [309] ^<HOST> .* "POST /wp-login.php
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [77618] Day(?P<_sep>[-/])MON(?P=_sep)Year[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-
Lines: 77618 lines, 0 ignored, 309 matched, 77309 missed
[processed in 15.31 sec]
|- Matched line(s):
| 185.34.244.250 - - [05/Mar/2017:13:11:24 +0300] "POST /wp-login.php HTTP/2.0" 200 2208 "https://sevo44.ru/wp-login.php?redirect_to=https%3A%2F%2Fsevo44.ru%2Fwp-admin%2F&reauth=1" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "2.27"
| 185.34.244.250 - - [05/Mar/2017:13:11:30 +0300] "POST /wp-login.php HTTP/2.0" 302 955 "https://sevo44.ru/wp-login.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-"
= часть информации скрыта =
После последующих необходимых изменениях перезагружаем стандартной для CentOS 7 командой:
systemctl restart fail2ban
После перезагрузки на почту будут приходить сообщения об остановке, запуске всех работающих фильтров и всех заблокированных ip.
Для полной уверенности посмотрим статус:
systemctl status fail2ban
● fail2bаn.service - Fail2Bаn Service
Loaded: loaded (/usr/lib/systemd/system/fail2bаn.service; enabled; vendor preset: disabled)
Active: active (running) since Пн 2017-04-10 23:23:47 MSK; 2min 20s ago
Docs: man:fail2ban(1)
Process: 30794 ExecStop=/usr/bin/fail2bаn-client stop (code=exited, status=0/SUCCESS)
Process: 30830 ExecStart=/usr/bin/fail2bаn-client -x start (code=exited, status=0/SUCCESS)
Main PID: 30834 (fail2ban-server)
CGroup: /system.slice/fail2bаn.service
└─30834 /usr/bin/python2 -s /usr/bin/fail2bаn-server -s /var/run/fail2ban/fail2bаn.sock -p /var/run/fail2ban/fail2bаn.pid -x -b
апр 10 23:23:46 ih378645.vds.myihor.ru systemd[1]: Starting Fail2Ban Service...
апр 10 23:23:47 ih378645.vds.myihor.ru fail2ban-client[30830]: 2017-04-10 23:23:47,141 fail2bаn.server [30832]: INFO Starting ...v12.45.668
апр 10 23:23:47 ih378645.vds.myihor.ru fail2ban-client[30830]: 2017-04-10 23:23:47,141 fail2bаn.server [30832]: INFO Starting ...n mode
апр 10 23:23:47 ih378645.vds.myihor.ru systemd[1]: Started Fail2Ban Service.
Hint: Some lines were ellipsized, use -l to show in full.
Всё у нас хорошо. Работает и стартует при перезагрузке сервера.
Главный файл настройки
В главном файле настройки указывается куда будут складываться логи и другие параметры. Нам важно убедится в правильности пути до лог файлов. Откроем и посмотрим куда пишутся логи:
cat /etc/fail2ban/fail2ban.conf
= вывод команды с пояснениями =
# Где лежат логи
logtarget = /var/log/fail2ban.log
Ротация логов сервиса
Откроем файл ротации сервиса и сделаем необходимые изменения:
Мне удобней чтобы ротация проходила каждый день и хранилась 30 дней.
Сохраним и применим изменения без перезагрузки:
logrotate /etc/logrotate.conf
Работа с сервисом
Выведем информацию о работающих фильтрах:
fail2ban-client status
= вывод команды =
Status
|- Number of jail: 1
`- Jail list: sites-sevo44ru
Видим что активен один фильтр.
Выведем детальную информацию о фильтре:
fail2ban-client status sites-sevo44ru
= вывод команды =
Status for the jail: sites-sevo44ru
|- Filter
| |- Currently failed: 0
| |- Total failed: 4
| `- File list: /web/sites/sevo44.ru/log/access.log
`- Actions
|- Currently banned: 1
|- Total banned: 4
`- Banned IP list: 92.53.96.68
Видим что всего было 4 срабатывания и 1 IP что заблокирован.
Для ручного блокирования используем команду:
fail2ban-client set sites-sevo44ru banip 91.200.12.91
= вывод команды =
91.200.12.91
Для ручного разблокирование используем команду:
fail2ban-client set sites-sevo44ru unbanip 91.200.12.91
= вывод команды =
91.200.12.91
Осталось окончательно убедится что сервис работает. Посмотрим текущие правила iptables:
iptables -L -v -n
= вывод команды. только интересующая нас часть =
Chain f2b-sites-sevo44ru (1 references)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 91.200.12.91 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- * * 92.53.96.68 0.0.0.0/0 reject-with icmp-port-unreachable
18949 3413K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Всё отлично. В выводе команды видим заблокированные ip адреса.
Результат
Хочется вам или нет, но периодически необходимо просматривать логи сайтов. Только так можно вовремя выявить проблемные места с сайтом и вовремя отреагировать на паразитирующую активность всякой интернет шушары. Хочется сразу сказать что иногда можно не успеть вовремя среагировать и ресурс будет взломан но для этого случая всегда держите в сохраняемости актуальные резервные копии сайта.
Virtual Hosts или добавление виртуального хоста на web-сервере под управлением NGINX для операционной системы CentOS 7. Возможность добавлять виртуальные хосты позволяет запускать несколько web-сайтов на одном физическом сервере. Рассмотрим основные моменты создания.
Введение
Начальную настройку Nginx в операционной системе CentOS 7 мы произвели в статье NGINX на web сервер CentOS 7. Все дальнейшие действия будем производить с учетом этой информации.
Не буду в качестве примера рассматривать установку какого либо движка сайта. Действия при добавлении виртуальных хостов для всех движков сайтов одинаковые! Настройка для конкретного движка это отдельная тема. Необходимую информацию вы всегда сможете найти в документации по нужному движку сайта.
Структура каталогов
Первое что необходимо сделать для последующей работы с web-сервером, это определится со структурой каталогов где будут лежать данные сайтов. В моем случае папка с данными сайта будет называться sevo44.ru по аналогии с доменным именем. Название папки может быть любое. В конфигурационном файле nginx прописывается путь до необходимой папки.
В моем случае структура выглядит так:
web — папка в корне сервера,
web/sites — папка где лежат все виртуальные хосты (сайты),
web/sites/sevo44.ru — папка где лежат файлы конкретного сайта,
web/sites/sevo44.ru/www — папка с файлами сайта,
web/sites/sevo44.ru/log — папка с логами сайта.
Создадим всю структуру выполнив команду в консоли:
Не забываем дать нужные права для файлов сайта! Это действие нужно выполнять каждый раз как только вы добавляете файлы не из под пользователя nginx!
Дадим необходимые права на созданные каталоги:
chown -R nginx:nginx /web/sites/sevo44.ru
Данные на месте. Осталось создать файл настройки для Nginx в котором будут указаны все параметры работы с сайтом.
Обработка сессий PHP
Без создания этой папки с необходимыми правами для Nginx, данные сайтов могут не обрабатываться и будет показана ошибка при попытке просмотра сайта с браузера.
Создадим необходимую папку с нужными правами:
cd /var/lib/php/
mkdir session
chown nginx:nginx session/
Virtual Hosts для NGINX
Настройка Virtual Hosts в Nginx подразумевает два варианта указания настроек для виртуальных сайтов:
Все правила для сайтов писать в конфигурационном файле /etc/nginx/nginx.conf,
Создать для каждого виртуального сайта свой файл в /etc/nginx/conf.d с названием имя сайта.conf.
Мне удобней работать с файлами настроек для каждого сайта. Чтобы такая возможность была необходимо в главном файлеприсутствие строки include /etc/nginx/conf.d/*.conf.
В создаваемом файле я намеренно не стал убирать некоторые строчки которые в последствии нам понадобятся для перевода сайта на сертификат ssl.
Как вы уже заметили логи для каждого сайта будут находится для каждого созданного виртуального хоста отдельно, что упрощает поиск и определение ошибок при работе.
Для всех своих сайтов я произвожу ротацию логов раз в сутки. Создадим файл для ротации где будем указывать все наши сайты:
Теперь каждый день файлы будут ротироваться и мы сможем просматривать логи за каждый день.
Результат
Настроили Virtual Hosts для Nginx с базовыми параметрами подходящими под большинство сайтов. Не так давно я стал использовать Nginx, но уже сейчас могу точно сказать, что работает он стабильно и очень шустро. Конечно есть некоторые неудобство, после перехода с Apach, но это лишь годами выработанная привычка.
Рассмотрим как установить и настроить последнюю версию PhpMyAdmin из исходных данных. Web сервер работает под управлением Nginx. Пожалуй это самый востребованный сервис для веб разработчиков.
Введение
В этой статье мы установим из исходников PhpMyAdmin работающий на веб сервере под управлением Nginx.
Во всех система можно установить этот пакет из репозиториев, но к сожалению версии там не всегда последние и бывают проблемы с настройкой. Вариант установки из исходников универсальный и подойдет практически для любой системы.
В данном примере за основу взять вариант настройки на системах CentOS.
Перед тем как устанавливать PhpMyAdmin необходимо что бы в системе были установлены сервисы Nginx, PHP и MariaDB.
Ссылки на статьи в который вы узнаете как можно настроить всё необходимое:
Дадим необходимые права для Nginx на все папки и файлы:
chown -R nginx:nginx /var/www/pma.sevo44.ru
Все данные готовы! Дальше необходимо настроить Nginx для работы PhpMyAdmin.
Настройка Nginx для PhpMyAdmin
Конфигурационый фал Nginx показан с учетом настройки сервисов PHP и Nginx описаных на данном сайте.
Для начала нам необходимо определится с доменным именем, на котором будет работать наша система управления базами данных. В нашем случае используется домен sevo44, где по адресу pma.sevo44.ru и будет работать PhpMyAdmin.
Конфигурационный файл pma.sevo44.ru.conf, для домена третьего уровня создаем в папке /etc/nginx/conf.d/ со следующим содержанием:
Обращаю внимание на то что в файле закоментированы параметры которые позволяют работать PhpMyAdmby c использованием сертификата ssl. Узнать про то как можно настроить работу сайта в защищеном режиме можно из статьи SSL бесплатный для сайта Nginx.
Создаем файл с логином и паролем для доступа:
=== Команда которая создаст пользователя pma ===
sh -c "echo -n 'pma:' >> /etc/nginx/.htpasswd"
=== Команда для создания пароля пользователю pma ===
sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
= Вывод команды с пояснениями =
Password: пароль
Verifying - Password: повтор пароля
Проверим на правильность настройки и перезагрузим Nginx:
nginx -t
= вывод команды =
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s reload
Настройка ротации логов
Все файлы правил для ротации находятся в папке /etc/logrotate.d. добавим туда необходимый нам файл с нужными параметрами:
vim /etc/logrotate.d/pma-sevo44
= необходимые данные для внесения =
/web/sites/pma.sevo44.ru/log/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
Сохраним и применим изменения без перезагрузки:
logrotate /etc/logrotate.conf
По такому принципу настраивается ротация для любых данных, но обычно этот механизм настраивают для логов, хотя он может работать и с другими файлами.
Настройка папки для хранения сессий PHP
Без наличия этой папки с необходимыми правами для Nginx, данные не будут обрабатываться, о чем будет показывать страница с ошибкой при попытке зайти по адресу http://pma.sevo44.ru.
phpMyAdmin — Error
Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.
session_start(): open(SESSION_FILE, O_RDWR) failed: No such file or directory (2)
Проверим наличие папки с нужными правами:
=== Переходим в папку ===
cd /var/lib/php/
=== Проверяем наличие и если нет создаем папку ===
ls
= Вывод команды =
opcache peclxml session wsdlcache
mkdir session
=== Назначаем нужны права ===
chown nginx:nginx session/
Предварительная подготовка закончена и осталось лишь настроить сам PhpMyAdmin.
Создание файла config.inc.php для PhpMyAdmin
Вариантов создать файл настроек несколько:
Переименовать файл config.sample.inc.php в config.inc.php и отредактировать параметры под свои нужды,
Средствами самого PMA войдя в панели управления под root.
Для меня оптимален второй вариант, так как он нагляден и после настройки блокирует механизм повторной попытки создать файл настроек.
После авторизации под пользователем root, который мы указали при настройке MariaDB, внизу мы увидим сообщение говорящее о необходимости выполнить действия для настройки.
Вначале разберемся с первым сообщением. Как и написано переходим в любую базу. Выберем базу mysgl в меню слева.
Жмем «Узнать причину» почему нет хранилища.
Нажимаем «Создать» и выполнятся все необходимые действия.
Теперь непосредственно создадим средствами панели управления PhpMyAdmin файл настроек config.inc.php.
Переходим по меню сверху «Настройки» и видим блок.
Нажимаем «Скрипт настройки»
Создаем сервер localhost, выбираем язык, и конец строки. Можете пройтись по остальным настройкам и указать всё на свой вкус и цвет.
Смотри результат настроек.
Скачиваем себе файл, закидываем в корневую папку PhpMyAdmin. Откроем посмотреть как он выглядит:
Последнее что нам осталось сделать, это дать права Nginx для этого файла. Так как все файлы должны иметь владельца Nginx повторим команду команду которую делали ранее:
chown -R nginx:nginx /var/www/pma.sevo44.ru
Настройка закончилась и теперь при попытке повторно создать этот файл будет выскакивать сообщение:
Один PhpMyAdmin для разных серверов
Обна из удобных возможностей программы это возможность имея одну версию подключатся к базам данных работающих на разных серверах.
В конфигурации выше был указан следующий код который отвечает за возможность подключатся к удаленым базам данных:
/* Server: wp [2] */
$i++;
$cfg['Servers'][$i]['verbose'] = 'wp'; - отображение в меню выбора$cfg['Servers'][$i]['host'] = '10.10.0.3'; - ip сервера с убаленой db
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';
Для реализации этой возможности необходимо сделать еще две вещи:
Добавить параметр bind-address=0.0.0.0 в конфигурационном файле самого сервера баз MariaDB разрешающий подключатся с любого адреса (или укажите конкретный IP) в разделе [mysqld] ;
Сделать необходимые права для пользователя баз данных.
Для удобства разграничения прав лучше создавать базу с правами на одного пользователя.
Создадим пользователя со своей базой данных:
Выбираем «Учётные записи пользователей» — «Добавить учетную запись пользователя«,
Создаем имя, пароль и ставим галочку «Создать базу данных с таким же именем и предоставить на неё все привилегии.» и в самом низу нажимаем «Вперёд«
База с правами создана и теперь эти данные можете предоставить по требованию для работы с ней.
Имейте ввиду что данные пользователя прописываются в файлах сайта и при смене пароля не забывайте их менять!
Удаление пользователя с его базой данных выполняется аналогичным способом.
Заключение
После всех выполненных действий мы получили последнюю стабильную версию PhpMyAdmin которая будет удобна в работе с администрированием баз данных.
Обслуживание компьютеров, ремонт, лечение вирусов, модернизация. Системы на ОС Linux. Создание и продвижение Интернет проектов. Бесплатные консультации. Офисные АТС. Видеонаблюдение.