Архив рубрики: Публикации

Резервное копирование PostgreSQL

В данной инструкции рассмотрены варианты и примеры создания резервных копий и восстановления баз СУБД PostgreSQL.




Все команды, которые приводятся ниже, должны выполняться из командной строки. В Linux — это окно терминала, в Windows — командная строка (cmd.exe) с переходом в папку установки PostgreSQL.




Создание резервных копий




Базовая команда




Синтаксис:




pg_dump <параметры> <имя базы> > <файл, куда сохранить дамп>




Пример:




pg_dump users > /tmp/users.dump




Пользователь и пароль




Если резервная копия выполняется не от учетной записи postgres, необходимо добавить опцию -U с указанием пользователя:




pg_dump -U dmosk -W users > /tmp/users.dump




* где dmosk — имя учетной записи; опция W потребует ввода пароля.




Сжатие данных




Для экономии дискового пространства или более быстрой передачи по сети можно сжать наш архив:




pg_dump users | gzip > users.dump.gz




Скрипт для автоматического резервного копирования




Рассмотрим 2 варианта написания скрипта для резервирования баз PostgreSQL. Первый вариант — запуск скрипта от пользователя root для резервирования одной базы. Второй — запуск от пользователя postgres для резервирования всех баз, созданных в СУБД.




Для начала, создадим каталог, в котором разместим скрипт, например:




mkdir /scripts




И сам скрипт: 




vi /scripts/postgresql_dump.sh




Вариант 1. Запуск от пользователя root; одна база.




#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

PGPASSWORD=password
export PGPASSWORD
pathB=/backup
dbUser=dbuser
database=db

find $pathB ( -name "*-1[^5].*" -o -name "*-[023]?.*" ) -ctime +61 -delete
pg_dump -U $dbUser $database | gzip > $pathB/pgsql_$(date "+%Y-%m-%d").sql.gz

unset PGPASSWORD




* где password — пароль для подключения к postgresql; /backup — каталог, в котором будут храниться резервные копии; dbuser — имя учетной записи для подключения к БУБД; pathB — путь до каталога, где будут храниться резервные копии.
* данный скрипт сначала удалит все резервные копии, старше 61 дня, но оставит от 15-о числа как длительный архив. После при помощи утилиты pg_dump будет выполнено подключение и резервирование базы db. Пароль экспортируется в системную переменную на момент выполнения задачи.




Для запуска резервного копирования по расписанию, сохраняем скрипт в файл, например, /scripts/postgresql_dump.sh и создаем задание в планировщике:




crontab -e
3 0 * * * /scripts/postgresql_dump.sh




* наш скрипт будет запускаться каждый день в 03:00.




Вариант 2. Запуск от пользователя postgres; все базы.




#!/bin/bash

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin



pathB=/backup/postgres



find $pathB ( -name "*-1[^5].*" -o -name "*-[023]?.*" ) -ctime +61 -delete



for dbname in `echo "SELECT datname FROM pg_database;" | psql | tail -n +3 | head -n -2 | egrep -v 'template0|template1|postgres'`; do

    pg_dump $dbname | gzip > $pathB/$dbname-$(date "+%Y-%m-%d").sql.gz

done;




* где /backup — каталог, в котором будут храниться резервные копии; pathB — путь до каталога, где будут храниться резервные копии.
* данный скрипт сначала удалит все резервные копии, старше 61 дня, но оставит от 15-о числа как длительный архив. После найдет все созданные в СУБД базы, кроме служебных и при помощи утилиты pg_dump будет выполнено резервирование каждой найденной базы. Пароль нам не нужен, так как по умолчанию, пользователь postgres имеет возможность подключаться к базе без пароля.




Необходимо убедиться, что у пользователя postgre будет разрешение на запись в каталог назначения, в нашем примере, /backup/postgres.




Зададим в качестве владельца файла, пользователя postgres:




chown postgres:postgres /scripts/postgresql_dump.sh




Для запуска резервного копирования по расписанию, сохраняем скрипт в файл, например, /scripts/postgresql_dump.sh и создаем задание в планировщике:




crontab -e -u postgres




* мы откроем на редактирование cron для пользователя postgres.




3 0 * * * /scripts/postgresql_dump.sh




* наш скрипт будет запускаться каждый день в 03:00.




Права и запуск




Разрешаем запуск скрипта, как исполняемого файла:




chmod +x /scripts/postgresql_dump.sh




Единоразово можно запустить задание на выполнение резервной копии:




/scripts/postgresql_dump.sh




… или от пользователя postgres:




su - postgres -c "/scripts/postgresql_dump.sh"




На удаленном сервере




Если сервер баз данных находится на другом сервере, просто добавляем опцию -h:




pg_dump -h 192.168.0.15 users > /tmp/users.dump




* необходимо убедиться, что сама СУБД разрешает удаленное подключение. Подробнее читайте инструкцию Как настроить удаленное подключение к PostgreSQL.




Дамп определенной таблицы




Запускается с опцией -t <table> или —table=<table>:




pg_dump -t students users > /tmp/students.dump




* где students — таблица; users — база данных.




Если наша таблица находится в определенной схеме, то она указывается вместе с ней, например:




pg_dump -t public.students users > /tmp/students.dump




* где public — схема; students — таблица; users — база данных.




Размещение каждой таблицы в отдельный файл




Также называется резервированием в каталог. Данный способ удобен при больших размерах базы или необходимости восстанавливать отдельные таблицы. Выполняется с ипользованием ключа -d:




pg_dump -d customers > /tmp/folder




* где /tmp/folder — путь до каталога, в котором разместяться файлы дампа для каждой таблицы.




Для определенной схемы




В нашей базе может быть несколько схем. Если мы хотим сделать дамп только для определенной схемы, то используем опцию -n, например:




pg_dump -n public peoples > /tmp/peoples.public.sql




* в данном примере мы заархивируем схему public базы данных peoples.




Только схемы (структуры)




Для резервного копирования без данных (только таблицы и их структуры):




pg_dump --schema-only users > /tmp/users.schema.dump




Также, внутри каждой базы могут быть свои схемы с данными. Если нам нужно сделать дамп именно той схемы, которая внутри базы, используем ключ -n:




pg_dump --schema-only users -n production > /tmp/users.schema_production.dump




* в данном примере мы создадим дамп структуры базы данных users только для схемы production.




Или полный дамп с данными для схемы внутри базы данных:




pg_dump users -n production > /tmp/users.production.dump




Только данные




pg_dump --data-only users > /tmp/users.data.dump




Использование pgAdmin




Данный метод хорошо подойдет для компьютеров с Windows и для быстрого создания резервных копий из графического интерфейса.




Запускаем pgAdmin — подключаемся к серверу — кликаем правой кнопкой мыши по базе, для которой хотим сделать дамп — выбираем Резервная копия:







В открывшемся окне выбираем путь для сохранения данных и настраиваемый формат:







При желании, можно изучить дополнительные параметры для резервного копирования:







После нажимаем Резервная копия — ждем окончания процесса и кликаем по Завершено.




Не текстовые форматы дампа




Другие форматы позволяют делать частичное восстановление, работать в несколько потоков и сжимать данные.




Бинарный с компрессией:




pg_dump -Fc users > users.bak




Тарбол:




pg_dump -Ft users > users.tar




Directory-формат:




pg_dump -Fd users > users.dir




Использование pg_basebackup




pg_basebackup позволяет создать резервную копию для кластера PostgreSQL.




pg_basebackup -h node1 -D /backup




* в данном примере создается резервная копия для сервера node1 с сохранением в каталог /backup.




pg_dumpall




Данная утилита делает выгрузку всех баз данных, в том числе системных. На выходе получаем файл для восстановления в формате скрипта.




pg_dumpall > cluster.bak




Утилиту удобно использовать с ключом -g (—globals-only) — выгрузка только глобальных объектов (ролей и табличных пространств).




Для создание резервного копирования со сжатием:




pg_dumpall | gzip > cluster.tar.gz




Восстановление




Может понадобиться создать базу данных. Это можно сделать SQL-запросом:




=# CREATE DATABASE users WITH ENCODING='UTF-8';




* где users — имя базы; UTF-8 — используемая кодировка.




Если мы получим ошибку:




ERROR:  encoding "UTF8" does not match locale "en_US"
DETAIL:  The chosen LC_CTYPE setting requires encoding "LATIN1".




Указываем больше параметров при создании базы:




CREATE DATABASE users WITH OWNER 'postgres' ENCODING 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' TEMPLATE = template0;




Базовая команда




Синтаксис:




psql <имя базы> < <файл с дампом>




Пример:




psql users < /tmp/users.dump




С авторизацией




При необходимости авторизоваться при подключении к базе вводим:




psql -U dmosk -W users < /tmp/users.dump




* где dmosk — имя учетной записи; опция W потребует ввода пароля.




Из файла gz




Сначала распаковываем файл, затем запускаем восстановление:




gunzip users.dump.gz




psql users < users.dump




Или одной командой:




zcat users.dump.gz | psql users




Определенную базу




Если резервная копия делалась для определенной базы, запускаем восстановление:




psql users < /tmp/database.dump




Если делался полный дамп (всех баз), восстановить определенную можно при помощи утилиты pg_restore с параметром -d:




pg_restore -d users cluster.bak




Определенную таблицу




Если резервная копия делалась для определенной таблицы, можно просто запустить восстановление:




psql users < /tmp/students.dump




Если делался полный дамп, восстановить определенную таблицу можно при помощи утилиты pg_restore с параметром -t:




pg_restore -a -t students users.dump




С помощью pgAdmin




Запускаем pgAdmin — подключаемся к серверу — кликаем правой кнопкой мыши по базе, для которой хотим восстановить данные — выбираем Восстановить:







Выбираем наш файл с дампом:







И кликаем по Восстановить:







Использование pg_restore




Данная утилита предназначена для восстановления данных не текстового формата (в одном из примеров создания копий мы тоже делали резервную копию не текстового формата).




Из бинарника:




pg_restore -Fc users.bak




Из тарбола:




pg_restore -Ft users.tar




С созданием новой базы:




pg_restore -Ft -C users.tar




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




pg_restore -d "postgresql://dmosk_user:dmosk_pass@localhost/dmosk_base" -Fc users.bak




* в данном примере мы подключимся к локальной базе (localhost) с названием dmosk_base от пользователя dmosk_user с паролем dmosk_pass.




Работа с CSV




Мы можем переносить данные с использованием файлов csv. Это нельзя назвать напрямую резервным копированием, но в рамках данной инструкции материал будет интересен.




Создание файла CSV (экспорт)




Пример запроса (выполняется в командной оболочке SQL):




> COPY (SELECT * FROM public.users WHERE name LIKE 'А%') TO '/tmp/users.csv' WITH CSV DELIMITER ';' HEADER;




* в данном примере мы выгрузим все данные для таблицы users в схеме public, где значение поля name начинается с буквы А. Результат будет сохранен в файл /tmp/users.csv. Также мы указываем, что в качестве разделителя данных нужно использовать точку с запятой и первой строкой сделать заголовок.




Также мы можем сделать выгрузку, но сделать вывод в оболочку и перенаправить его в файл:




psql -d "postgresql://pg_user:pg_pass@localhost:5432/pg_databasename" -c "COPY (SELECT * FROM public.users WHERE name LIKE 'А%') TO STDIN WITH CSV DELIMITER ';' HEADER;" > /tmp/users.csv




Импорт данных из файла CSV




Также можно выполнить запрос в оболочке SQL:




> COPY public.users FROM '/tmp/test.csv' DELIMITER ';' CSV HEADER;




Или перенаправить запрос через STDOUT из файла:




psql -d "postgresql://pg_user:pg_pass@localhost:5432/pg_databasename" -c "COPY public.users FROM STDOUT DELIMITER ';' CSV HEADER;" < /tmp/users.csv




* в нашем примере мы выполним импорт данных из ранее созданного файла /tmp/users.csv в таблицу users.




Возможные ошибки




Рассмотрим некоторые проблемы, с которыми можно столкнуться при работе с дампами PostgreSQL.




Input file appears to be a text format dump. please use psql.




Причина: дамп сделан в текстовом формате, поэтому нельзя использовать утилиту pg_restore.




Решение: восстановить данные можно командой psql <имя базы> < <файл с дампом> или выполнив SQL, открыв файл, скопировав его содержимое и вставив в SQL-редактор.




No matching tables were found




Причина: Таблица, для которой создается дамп не существует. Утилита pg_dump чувствительна к лишним пробелам, порядку ключей и регистру.




Решение: проверьте, что правильно написано название таблицы и нет лишних пробелов.




Too many command-line arguments




Причина: Утилита pg_dump чувствительна к лишним пробелам.




Решение: проверьте, что нет лишних пробелов.




Aborting because of server version mismatch




Причина: несовместимая версия сервера и утилиты pg_dump. Может возникнуть после обновления или при выполнении резервного копирования с удаленной консоли.




Решение: нужная версия утилиты хранится в каталоге /usr/lib/postgresql/<version>/bin/. Необходимо найти нужный каталог, если их несколько и запускать нужную версию. При отсутствии последней, установить.




No password supplied




Причина: нет системной переменной PGPASSWORD или она пустая.




Решение: либо настройте сервер для предоставление доступа без пароля в файле pg_hba.conf либо экспортируйте переменную PGPASSWORD (export PGPASSWORD или set PGPASSWORD).




Неверная команда




Причина: при выполнении восстановления возникла ошибка, которую СУБД не показывает при стандартных параметрах восстановления.




Решение: запускаем восстановление с опцией -v ON_ERROR_STOP=1, например:




psql -v ON_ERROR_STOP=1 users < /tmp/users.dump




Теперь, когда возникнет ошибка, система прекратит выполнять операцию и выведет сообщение на экран.




Источник: https://www.dmosk.ru/miniinstruktions.php?mini=postgresql-dump



Блокирование вредоносных ботов, спама, юзер-агентов, Ransomware на Nginx

В последние дни многие организации стали жертвами киберпреступности. Были разработаны более сложные ботнеты и другие методы атак, которые увеличивают скорость этих атак.




Наиболее распространенными атаками являются DDoS (распределенный отказ в обслуживании), захват учетных записей (ATO) и перехват контента с веб-сайтов.




Эти атаки имеют тяжелые последствия для целевых организаций и должны быть предотвращены любой ценой.




Обычно Bad Bots можно определить как программные приложения, которые выполняют автоматизированные задачи со злыми намерениями через Интернет.




Они маскируются в системе путем маскировки агентов пользователя.




Такими плохими ботами могут быть;




  • Боты или серверы, связанные с вирусами или вредоносным ПО
  • Боты для правительственного наблюдения
  • Атакующие сети ботнетов (Mirai)
  • Сайты азартных игр и порносайты
  • Сканеры уязвимостей
  • Спам-рефереры
  • Браузерное рекламное и вредоносное ПО (Yontoo и т.д.)
  • Инструменты для исследования ссылок и тестирования обратных ссылок
  • SEO компании, которые используют ваши конкуренты для улучшения своего SEO
  • Сайты хотлинк на изображения и воры изображений
  • Боты для ранжирования ссылок
  • Сборщики электронной почты
  • Сайты, связанные с выгодными вредоносными программами, рекламным ПО и Ransomware Кампании Clickjacking
  • Остановка “Ghost спама” Google Analytics




Это руководство демонстрирует, как вы можете блокировать Bad Bots, спам, User-Agents и Ransomware на Nginx.




Шаг 1 – Скачать Nginx Bad Bot Blocker




Nginx Bad Bot Blocker был разработан Митчеллом Крогом для использования в веб-сервере Nginx.




Его можно загрузить в систему Linux с помощью команды:




### С wget
wget https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/install-ngxblocker

### С curl
sudo curl -sL https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/install-ngxblocker -o install-ngxblocker




🖧 В чем разница между curl и Wget?




После загрузки файла сделайте его исполняемым.




chmod +x install-ngxblocker







На системах FreeBSD пакет доступен в репозитории по умолчанию и может быть установлен с помощью команды:




pkg install www/nginx-ultimate-bad-bot-blocker




Шаг 2 – Скачайте необходимые файлы.




В других системах Linux используйте загруженный файл в каталоге /usr/local/sbin, как показано ниже:




sudo ./install-ngxblocker




Установка будет происходить следующим образом:




Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt

** Dry Run ** | not updating files | run  as 'install-ngxblocker -x' to install files.

Creating directory: /etc/nginx/conf.d
Creating directory: /etc/nginx/bots.d

REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master

Downloading [FROM]=>  [REPO]/conf.d/globalblacklist.conf            [TO]=>  /etc/nginx/conf.d/globalblacklist.conf
Downloading [FROM]=>  [REPO]/conf.d/botblocker-nginx-settings.conf  [TO]=>  /etc/nginx/conf.d/botblocker-nginx-settings.conf

REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master

Downloading [FROM]=>  [REPO]/bots.d/blockbots.conf              [TO]=>  /etc/nginx/bots.d/blockbots.conf
Downloading [FROM]=>  [REPO]/bots.d/ddos.conf                   [TO]=>  /etc/nginx/bots.d/ddos.conf
Downloading [FROM]=>  [REPO]/bots.d/custom-bad-referrers.conf   [TO]=>  /etc/nginx/bots.d/custom-bad-referrers.conf
Downloading [FROM]=>  [REPO]/bots.d/bad-referrer-words.conf     [TO]=>  /etc/nginx/bots.d/bad-referrer-words.conf
Downloading [FROM]=>  [REPO]/bots.d/blacklist-ips.conf          [TO]=>  /etc/nginx/bots.d/blacklist-ips.conf
Downloading [FROM]=>  [REPO]/bots.d/blacklist-user-agents.conf  [TO]=>  /etc/nginx/bots.d/blacklist-user-agents.conf
Downloading [FROM]=>  [REPO]/bots.d/whitelist-domains.conf      [TO]=>  /etc/nginx/bots.d/whitelist-domains.conf
Downloading [FROM]=>  [REPO]/bots.d/whitelist-ips.conf          [TO]=>  /etc/nginx/bots.d/whitelist-ips.conf

REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master

Downloading [FROM]=>  [REPO]/setup-ngxblocker      [TO]=>  /usr/local/sbin/setup-ngxblocker
Downloading [FROM]=>  [REPO]/update-ngxblocker     [TO]=>  /usr/local/sbin/update-ngxblocker




В приведенной выше команде перечислены пакеты, которые будут загружены, теперь используйте команду с параметром -x для записи этих изменений.




sudo ./install-ngxblocker -x




Вывод:




Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt

Creating directory: /etc/nginx/conf.d
Creating directory: /etc/nginx/bots.d

REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master

Downloading [FROM]=>  [REPO]/conf.d/globalblacklist.conf            [TO]=>  /etc/nginx/conf.d/globalblacklist.conf...OK
Downloading [FROM]=>  [REPO]/conf.d/botblocker-nginx-settings.conf  [TO]=>  /etc/nginx/conf.d/botblocker-nginx-settings.conf...OK

REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master

Downloading [FROM]=>  [REPO]/bots.d/blockbots.conf              [TO]=>  /etc/nginx/bots.d/blockbots.conf...OK
Downloading [FROM]=>  [REPO]/bots.d/ddos.conf                   [TO]=>  /etc/nginx/bots.d/ddos.conf...OK
Downloading [FROM]=>  [REPO]/bots.d/custom-bad-referrers.conf   [TO]=>  /etc/nginx/bots.d/custom-bad-referrers.conf...OK
Downloading [FROM]=>  [REPO]/bots.d/bad-referrer-words.conf     [TO]=>  /etc/nginx/bots.d/bad-referrer-words.conf...OK
Downloading [FROM]=>  [REPO]/bots.d/blacklist-ips.conf          [TO]=>  /etc/nginx/bots.d/blacklist-ips.conf...OK
Downloading [FROM]=>  [REPO]/bots.d/blacklist-user-agents.conf  [TO]=>  /etc/nginx/bots.d/blacklist-user-agents.conf...OK
Downloading [FROM]=>  [REPO]/bots.d/whitelist-domains.conf      [TO]=>  /etc/nginx/bots.d/whitelist-domains.conf...OK
Downloading [FROM]=>  [REPO]/bots.d/whitelist-ips.conf          [TO]=>  /etc/nginx/bots.d/whitelist-ips.conf...OK

REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master

Downloading [FROM]=>  [REPO]/setup-ngxblocker      [TO]=>  /usr/local/sbin/setup-ngxblocker...OK
Downloading [FROM]=>  [REPO]/update-ngxblocker     [TO]=>  /usr/local/sbin/update-ngxblocker...OK
Setting mode: 700 => /usr/local/sbin/install-ngxblocker
Setting mode: 700 => /usr/local/sbin/setup-ngxblocker
Setting mode: 700 => /usr/local/sbin/update-ngxblocker




После загрузки необходимых файлов в нужные папки, перейдите к выполнению скриптов установки и обновления.




sudo chmod +x /usr/local/sbin/setup-ngxblocker
sudo chmod +x /usr/local/sbin/update-ngxblocker




Шаг 3 – Установка Nginx Bad Bot Blocker




Чтобы установить Nginx Bad Bot Blocker, мы запустим скрипт установки.




Этот скрипт можно запустить в DRY-MODE, чтобы показать изменения, которые он внесет, и файлы, которые он загрузит, как показано ниже.




sudo /usr/local/sbin/setup-ngxblocker




Вывод:




/etc/nginx/sites-available/ssl.no-default.conf
/etc/nginx/sites-available/no-default.conf
/etc/nginx/sites-available/wordpress.example.com.conf

Configure every file above as a vhost ? [Y/N] : Y
Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt

** Dry Run ** | not updating files | run  as 'setup-ngxblocker -x' to setup files.

inserting: include /etc/nginx/conf.d/globalblacklist.conf;            => /etc/nginx/nginx.conf
inserting: include /etc/nginx/conf.d/botblocker-nginx-settings.conf;  => /etc/nginx/nginx.conf
inserting: include /etc/nginx/bots.d/blockbots.conf;                  => /etc/nginx/sites-available/wordpress.example.com.conf
inserting: include /etc/nginx/bots.d/ddos.conf;                       => /etc/nginx/sites-available/wordpress.example.com.conf

Whitelisting ip:  88.99.92.81     => /etc/nginx/bots.d/whitelist-ips.conf

Web directory not found ('/var/www'): not automatically whitelisting domains.

Checking for missing includes:

Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt

Nothing to update for directory: /etc/nginx/conf.d
Nothing to update for directory: /etc/nginx/bots.d
Nothing to update for directory: /usr/local/sbin
Setting mode: 700 => /usr/local/sbin/install-ngxblocker
Setting mode: 700 => /usr/local/sbin/setup-ngxblocker
Setting mode: 700 => /usr/local/sbin/update-ngxblocker




Чтобы внести изменения в nginx.conf, необходимо запустить скрипт с параметром -x.




sudo ./setup-ngxblocker -x




Ввыод:




/etc/nginx/sites-available/ssl.no-default.conf
/etc/nginx/sites-available/no-default.conf
/etc/nginx/sites-available/wordpress.example.com.conf

Configure every file above as a vhost ? [Y/N] : y
Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt

inserting: include /etc/nginx/conf.d/globalblacklist.conf;            => /etc/nginx/nginx.conf
inserting: include /etc/nginx/conf.d/botblocker-nginx-settings.conf;  => /etc/nginx/nginx.conf
inserting: include /etc/nginx/bots.d/blockbots.conf;                  => /etc/nginx/sites-available/wordpress.example.com.conf
inserting: include /etc/nginx/bots.d/ddos.conf;                       => /etc/nginx/sites-available/wordpress.example.com.conf

Whitelisting ip:  88.99.92.81     => /etc/nginx/bots.d/whitelist-ips.conf

Web directory not found ('/var/www'): not automatically whitelisting domains.

Checking for missing includes:

Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt

Nothing to update for directory: /etc/nginx/conf.d
Nothing to update for directory: /etc/nginx/bots.d
Nothing to update for directory: /usr/local/sbin
Setting mode: 700 => /usr/local/sbin/install-ngxblocker
Setting mode: 700 => /usr/local/sbin/setup-ngxblocker
Setting mode: 700 => /usr/local/sbin/update-ngxblocker




Приведенная выше команда включает все файлы виртуальных хостов Nginx на сервере и вносит ваш Ip-адрес в белый список в файле whitelist-ips.conf.




Вы можете внести желаемые изменения, отредактировав файл /etc/nginx/bots.d/whitelist-ips.conf.




По сути, скрипт добавляет приведенные ниже утверждения “include” в ваши файлы виртуальных хостов Nginx:




Кроме того, вы можете установить блокировщик в нестандартную папку Nginx, указав их:




sudo ./install-ngxblocker -x -c /usr/local/nginx/conf.d -b /usr/local/nginx/bots.d
sudo ./setup-ngxblocker -x -c /usr/local/nginx/conf.d -b /usr/local/nginx/bots.d
sudo ./update-ngxblocker -c /usr/local/nginx/conf.d -b /usr/local/nginx/bots.d -e yourname@youremail.com




После завершения проверьте синтаксис конфигурации Nginx.




$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful




Перезапустите Nginx, чтобы изменения были применены.




sudo systemctl restart nginx




Шаг 4 – Настройка автоматического обновления для блокировщика плохих ботов Nginx




Мы настроим задание Cron так, чтобы оно автоматически обновляло блокиратор, гарантируя вам последнюю версию.




Откройте файл для редактирования:




sudo crontab -e




В файле добавьте следующие строки, заменив адрес электронной почты соответствующим образом.




00 22 * * * sudo /usr/local/sbin/update-ngxblocker -e yourname@youremail.com




Эта команда будет автоматически обновлять блокировщик каждый день в 22-00 часа.




Вы также можете выполнять обновление 3-4 раза в день, установив задачу Cron на выполнение через каждые 8 часов, как показано ниже:




00 */8 * * * sudo /usr/local/sbin/update-ngxblocker -e yourname@youremail.com




Вы также можете отключить обновления по электронной почте с помощью команды:




00 */8 * * * sudo /usr/local/sbin/update-ngxblocker -n




Шаг 5 – Настройка Nginx Bad Bot Blocker




Nginx Bad Bot Blocker может быть настроен в соответствии с вашей средой путем редактирования файлов “include”.




Хорошо то, что эти файлы не перезаписываются при обновлении.




Для редактирования доступны следующие файлы:




etc/nginx/bots.d/whitelist-ips.conf
/etc/nginx/bots.d/whitelist-domains.conf
/etc/nginx/bots.d/blockbots.conf
/etc/nginx/bots.d/blacklist-domains.conf
/etc/nginx/bots.d/blacklist-user-agents.conf
/etc/nginx/bots.d/blacklist-ips.conf
/etc/nginx/bots.d/bad-referrer-words.conf
/etc/nginx/bots.d/custom-bad-referrers.conf
/etc/nginx/bots.d/ddos.conf




Например, если вы хотите заблокировать доступ GoogleBot к вашему сайту, отредактируйте файл /etc/nginx/bots.d/blacklist-user-agents.conf, который отменяет белый список по умолчанию для GoogleBot.




Это можно сделать и для любого другого бота, внесенного в белый список.




Шаг 6 – Тестирование Nginx Bad Bot Blocker




Вы можете протестировать ваш Nginx Bad Bot Blocker из терминала на другой системе, используя ваше доменное имя, как показано ниже:




curl -A "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" -I http://yourdomain.com




Вы также можете использовать:




curl -A "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" -I http://yourdomain.com




Вывод:




HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Wed, 27 Apr 2022 08:57:12 GMT
Content-Type: text/html
Content-Length: 3429
Last-Modified: Thu, 10 Jun 2021 09:09:03 GMT
Connection: keep-alive
ETag: "60c1d6af-d65"
Accept-Ranges: bytes




Приведенный ниже тест должен выдать ошибку, описанную ниже:




  • curl: (52) Пустой ответ от сервера
  • curl: (56) TCP-соединение сброшено сверстником
  • curl: (92) HTTP/2 поток 0 не был закрыт чисто: PROTOCOL_ERROR (err 1).




Для проверки используйте команды ниже:




curl -A "Xenu Link Sleuth/1.3.8" -I http://yourdomain.com
curl -I http://yourdomain.com -e http://100dollars-seo.com
curl -I http://yourdomain.com -e http://zx6.ru




На этом мы заканчиваем данное руководство по блокированию вредоносных ботов, спама, пользовательских агентов и Ransomware на Nginx.




Вы можете внести необходимые изменения в файлы “include” для разрешения/блокирования ботов.




Источник: https://itsecforu.ru/2022/06/08/%f0%9f%8c%90-%d0%b1%d0%bb%d0%be%d0%ba%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b2%d1%80%d0%b5%d0%b4%d0%be%d0%bd%d0%be%d1%81%d0%bd%d1%8b%d1%85-%d0%b1%d0%be%d1%82%d0%be%d0%b2-%d1%81%d0%bf/



2022-06-13T23:14:24
Software

Развертывание сервера Graylog с помощью Ansible на Ubuntu/Debian/CentOS

Добро пожаловать в это руководство по развертыванию сервера Graylog на системе Ubuntu/Debian/CentOS Linux с помощью Ansible.




Graylog – это бесплатный инструмент для агрегации и управления логами с открытым исходным кодом.




Он используется для сбора, анализа, визуализации журналов и отправки оповещений.




Сервер Graylog состоит из 4 компонентов, а именно:




  • Graylog Server – сервер, который передает журналы для визуализации на веб-интерфейсе.
  • MongoDB – это сервер базы данных, используемый для хранения данных и конфигураций.
  • ElasticSearch – это инструмент анализа журналов для Graylog Server.
  • Java – обеспечивает среду выполнения для ElasticSearch.




Все эти инструменты работают вместе для достижения главной цели – агрегации и управления журналами.




Использование Ansible для развертывания сервера Graylog Server позволяет легко автоматизировать рекурсивную задачу.




Ansible, как и другие инструменты оркестрации, должен быть установлен на управляющем узле, чтобы иметь возможность управлять подключенными хостами.




Эта установка с помощью ansible в настоящее время работает в следующих системах:




  • CentOS / RHEL: CentOS 7/8, RHEL 7/8
  •  Debian: Debian 10 / Debian 9
  • Ubuntu: Ubuntu 20.04 / Ubuntu 18.04




Шаг 1. Установка и настройка Ansible




Ansible может быть установлен на управляющей ноде несколькими методами.




Самый простой способ установить его на любой дистрибутив Linux – это использование PIP.




Прежде чем приступить к этому методу, необходимо установить Python и PIP.




##На Ubuntu
sudo apt update
sudo apt install python3 python3-pip -y

##На CentOS
sudo yum install python3 python3-pip -y




Теперь используйте установленный PIP для установки Ansible.




sudo pip3 install ansible




На macOS вы можете использовать brew для установки Ansible




brew install ansible




Проверьте правильность установки.




$ ansible --version
ansible [core 2.12.4]
  config file = None
  configured module search path = ['/home/ubuntu/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /home/ubuntu/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0]
  jinja version = 2.10.1
  libyaml = True




Ansible также может быть установлен из репозиториев пакетов по умолчанию:




##На Ubuntu / Debian
sudo apt install ansible

##На CentOS
sudo yum install epel-release
sudo yum install ansible




Создайте файл инвентари хостов nsible




Этот файл состоит из хостов, управляемых Ansible.




$ sudo vim /etc/ansible/hosts
[graylog]
192.168.205.9 ansible_ssh_user=username




Замените “username” в приведенной ниже команде на имя пользователя главного хоста.




Сгенерируйте и скопируйте SSH-ключи управляемого хоста на управляющую ноду.




ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub username@192.168.205.9




Это позволит вам управлять добавленными хостами без пароля.




Проверьте, работает ли это:




$ ansible -m ping all
192.168.205.9 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}




Шаг 2. Установите роль Graylog Ansible




Роль Graylog Ansible позволяет установить и настроить Graylog.




Ее можно установить с помощью команды:




$ ansible-galaxy install graylog2.graylog
Starting galaxy role install process
- downloading role 'graylog', owned by graylog2
- downloading role from https://github.com/Graylog2/graylog-ansible-role/archive/3.3.7.tar.gz
- extracting graylog2.graylog to /Users/jkmutai/.ansible/roles/graylog2.graylog
- graylog2.graylog (3.3.7) was installed successfully
- adding dependency: lean_delivery.java (7.1.0)
- adding dependency: elastic.elasticsearch (main)
- downloading role 'java', owned by lean_delivery
- downloading role from https://github.com/lean-delivery/ansible-role-java/archive/7.1.0.tar.gz
- extracting lean_delivery.java to /Users/jkmutai/.ansible/roles/lean_delivery.java
- lean_delivery.java (7.1.0) was installed successfully
- extracting elastic.elasticsearch to /Users/jkmutai/.ansible/roles/elastic.elasticsearch
- elastic.elasticsearch (main) was installed successfully




Из приведенного выше результата вы заметите, что следующие зависимости были установлены.




  • Java
  • Elasticsearch




Проверьте, были ли установлены зависимости роли , используя команду:




ansible-galaxy install -r ~/.ansible/roles/graylog2.graylog/requirements.yml




Не забудьте заменить ~/.ansible/roles/graylog2.graylog/ на правильный путь к вашей роли Graylog Ansible.




Шаг 3. Развертывание сервера Graylog с помощью Ansible Roles




Создайте playbook YAML для установки сервера Graylog в одном экземпляре.




vim graylog-playbook.yaml




Файл будет содержать следующие строки:




- hosts: "graylog"
  remote_user: "username"
  become: True
  vars:
    #Elasticsearch vars
    es_major_version: "7.x"
    es_version: "7.10.2"
    es_enable_xpack: False
    es_instance_name: "graylog"
    es_heap_size: "1g"
    es_config:
      node.name: "graylog"
      cluster.name: "graylog"
      http.port: 9200
      transport.tcp.port: 9300
      network.host: "127.0.0.1"
      discovery.seed_hosts: "localhost:9300"
      cluster.initial_master_nodes: "graylog"
    oss_version: True
    es_action_auto_create_index: False

    #Graylog vars
    graylog_version: 4.2
    graylog_install_java: True
    graylog_password_secret: "ncc4jque0VvGImadZ7jzX26NrESt30dY4U4nNfZWAXubcvUGDKnMjbC4eEAU0KcfWX6CDk4ME80CrYPP9ErpvyFPXc2H2xKf" # Insert your own here. Generate with: pwgen -s 96 1
    graylog_root_password_sha2: "434e27fac24a15cbf8b160b7b28c143a67d9e6939cbb388874e066e16cb32d75" # Insert your own root_password_sha2 here.
    graylog_http_bind_address: "{{ ansible_default_ipv4.address }}:9000"
    graylog_http_publish_uri: "http://{{ ansible_default_ipv4.address }}:9000/"
    graylog_http_external_uri: "http://{{ ansible_default_ipv4.address }}:9000/"

  roles:
    - role: "graylog2.graylog"
      tags:
        - "graylog"




Не забудьте заменить сгенерированный командой graylog_password_secret:




$ pwgen -N 1 -s 96
ncc4jque0VvGImadZ7jzX26NrESt30dY4U4nNfZWAXubcvUGDKnMjbC4eEAU0KcfWX6CDk4ME80CrYPP9ErpvyFPXc2H2xKf




Также замените graylog_root_password_sha2, созданный с помощью команды:




$ echo -n "Enter Password: " && head -1 </dev/stdin | tr -d 'n' | sha256sum | cut -d" " -f1
Enter Password: Str0ngPassw0rd
434e27fac24a15cbf8b160b7b28c143a67d9e6939cbb388874e066e16cb32d75




Теперь разверните сервер Graylog.




ansible-playbook graylog-playbook.yaml

## With custom inventory file ###
ansible-playbook graylog-playbook.yaml -i myinventory




Проверьте, запущен ли Elasticsearch:




$ curl -X GET localhost:9200
{
  "name" : "graylog",
  "cluster_name" : "graylog",
  "cluster_uuid" : "O6qVFbgjQvmTDZ3j-cAVSg",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "oss",
    "build_type" : "rpm",
    "build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
    "build_date" : "2021-01-13T00:42:12.435326Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}




Развертывание кластера Graylog с помощью Ansible (необязательно для HA)




Также можно развернуть кластер Graylog с большим количеством экземпляров Elasticsearch и Graylog.




Приведенный ниже пример включает 3 экземпляра Elasticsearch и 3 экземпляра Graylog.




Начните с развертывания кластера Elasticsearch:




- hosts: "elasticsearch"
  vars:
    es_major_version: "7.x"
    es_version: "7.10.2"
    es_enable_xpack: False
    es_instance_name: "graylog"
    es_heap_size: "1g"
    es_config:
      node.name: "{{ ansible_hostname }}"
      cluster.name: "graylog"
      http.port: 9200
      transport.port: 9300
      network.host: "0.0.0.0"
      discovery.seed_hosts: "elasticsearch01:9300, elasticsearch02:9300, elasticsearch03:9300"
      cluster.initial_master_nodes: "elasticsearch01, elasticsearch02, elasticsearch03"
    oss_version: True
    es_action_auto_create_index: False

  roles:
    - role: "elastic.elasticsearch"




Затем перейдите к развертыванию экземпляров MongoDB:




- hosts: "graylog"
  vars:
    mongodb_version: "4.4"
    bind_ip: "0.0.0.0"
    repl_set_name: "rs0"
    authorization: "disabled"
  roles:
    - community.mongodb.mongodb_repository
    - community.mongodb.mongodb_mongod
  tasks:
    - name: "Start MongoDB"
      service:
        name: "mongod"
        state: "started"
        enabled: "yes"

- hosts: "graylog01"
  tasks:
    - name: "Install PyMongo"
      apt:
        update_cache: yes
        name: "python3-pymongo"
        state: "latest"
    - name: Configure replicaset
      community.mongodb.mongodb_replicaset:
        login_host: "localhost"
        replica_set: "rs0"
        members:
        - graylog01
        - graylog02
        - graylog03




Наконец, разверните экземпляр Graylog:




- hosts: "graylog"
  vars:
    graylog_is_master: "{{ True if ansible_hostname == 'graylog01' else False }}"
    graylog_version: 4.2
    graylog_install_java: False
    graylog_install_elasticsearch: False
    graylog_install_mongodb: False
    graylog_password_secret: "" # Insert your own here. Generate with: pwgen -s 96 1
    graylog_root_password_sha2: "" # Insert your own root_password_sha2 here.
    graylog_http_bind_address: "{{ ansible_default_ipv4.address }}:9000"
    graylog_http_publish_uri: "http://{{ ansible_default_ipv4.address }}:9000/"
    graylog_http_external_uri: "http://{{ ansible_default_ipv4.address }}:9000/"
    graylog_elasticsearch_hosts: "http://elasticsearch01:9200,http://elasticsearch02:9200,http://elasticsearch03:9200"
    graylog_mongodb_uri: "mongodb://graylog01:27017,graylog02:27017,graylog03:27017/graylog"

  roles:
    - role: "graylog2.graylog"




Таким образом, у вас будет кластер Graylog с 3 экземплярами Elasticsearch и 3 экземплярами Graylog.




Шаг 4. Получите доступ к веб-интерфейсу Graylog




Теперь разрешите порт 9000 на брандмауэре:




##На Firewalld
sudo firewall-cmd --add-port=9000/tcp --permanent
sudo firewall-cmd --reload

##На UFW
sudo ufw allow 9000/tcp




Войдите в систему, используя стандартного пользователя admin и пароль, заданный с помощью graylog_root_password_sha2.




После успешной аутентификации вы должны получить доступ.



2022-06-13T23:11:29
Software

Apache HTTP Server 2.4.54 содержит 19 изменений и исправляет 8 уязвимостей.

Apache Software Foundation и Apache HTTP Server Project недавно объявили о выпуске новой версии Apache HTTP Server 2.4.54, так как эта версия Apache является последней версией GA. из ветки Apache HTTPD следующего поколения 2.4.x и представляет пятнадцать лет инноваций проекта и рекомендуется по сравнению со всеми предыдущими версиями. Этот выпуск Apache представляет собой выпуск, посвященный безопасности, функциям и исправлениям ошибок.

Новая версия, котораяe представляет 19 изменений и исправляет 8 уязвимостей, из которых некоторые из них разрешали доступ к данным, также могли привести, среди прочего, к отказу в обслуживании.





Читать

Вышла новая версия Cinnamon 5.4.

Через 6 месяцев разработки анонсирован выпуск новой версии популярной среды рабочего стола, Корица 5.4, в рамках которого сообщество разработчиков дистрибутива Linux Mint разрабатывает форк GNOME Shell.

Для тех, кто не знаком с этой средой рабочего стола «Cinnamon», могу сказать, что это основан на компонентах GNOME, но эти компоненты поставляются как периодически синхронизируемый форк без внешних зависимостей для GNOME.



Читать

Они разработали метод идентификации и отслеживания телефонов с помощью сигналов Bluetooth. 

Группа исследователей из Калифорнийского университета в Сан-Диего разработал метод идентификации мобильных устройств через знаки ипередается по воздуху через Bluetooth с низким энергопотреблением (BLE) и используется пассивными приемниками Bluetooth для обнаружения появления новых устройств в радиусе действия.

В зависимости от реализации сигналы маяка отправляются со скоростью примерно 500 раз в минуту и, по замыслу создателей стандарта, полностью анонимны и не могут использоваться для привязки пользователя.



Читать