Защита сайта от брутфорс и ддос атак

Чтобы понять, как защитить веб-систему от брутфорс или ддос атак, необходимо разобраться, что они из себя представляют.

Подробно о брутфорсах было раскатано ранее.

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

Так же «ддосить» эффективнее всего страницы, которые потребляют больше всего ресурсов вашего сервиса, а брутфорсят форму авторизации/восстановления пароля или же аналогичные АПИ для авторизации или восстановления пароля. При этом, злоумышленникам выгоднее, если ваш сайт, все таки доступен, так что они, скорее всего позаботятся, чтобы нагрузка была равномерная.

Итак, общие методы защиты и от брутфорса и от ддоса будут следующие:

  • Выставление лимитов на количество запросов в секунду/минут на уровне веб-сервера
  • Использование инструментов, которые автоматизируют блокировки айпи-адресов или user-agent клиентов, если количество запросов или ошибок блокировки превышает пороговое значение (например, fail2ban)
  • Косвенным инструментом, так же, являются панели мониторинга, настроенные на количество запросов или ошибок, которые позволят оперативно реагировать на параметры, отличные от нормальной ситуации
Пример одного из даш-бордов из Grafana со статусами ответов и ошибок
  • Настроенные уведомления, при изменении поведения вашей системы, т.е. потенциальных атаках
  • Так же важны обновления операционной системы и настройки веб-сервера на соответствующие нагрузки

Что еще можно добавить по бтурфорсам, отдельно

  • Собственные лимиты на формы и АПИ авторизации, восстановления паролей, которые могут быть строже, чем на «любую» страницу
  • На веб-формы можно повесить капчи (google recaptcha) и CSRF-защиту
  • Дву-факторная авторизация (например, с помощью СМС-шлюза или же Google Authenticator)
  • Уведомления пользователям, в случае, если произошла авторизация из неизвестного устройства или локации

Из косвенных методов зашиты:

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

Атака на наш веб-сайт — брутфорс — как и зачем

Один из самых распространённых типов атак на веб-сайт — это брутфорс (brute force).

Брут форс — это атака на веб систему, с целью взломать аккаунты. Чаще всего атакуются или форма авторизации или апи авторизации.

Так как же взламывают?

Для этого, злоумышленнику нужно или хорошо подготовится, или же найти готовые скрипты / инструкции по брутфорсу на конкретный веб сайт. Подготовка, в этом контексте, заключается в том, чтобы узнать входную точку запросов авторизации (адрес для ввода логина, чаще всего — адреса электронной почты, и пароля) и параметров запроса (ведь кроме логина и пароля могут потребоваться и другие параметры). Готовые инструкции злоумышленники находят на специализированных форумах, закрытых группах в соц сетях или заказывают у других злоумышленников.

Так же хакеру нужна база емэйл адресов и паролей для перебора. И тут есть различные подходы:

  • первый подход: набор емэйл адресов (часто, это адреса, которые были «хакнуты» ранее или же слиты/проданы не-добропорядочными организациями) и перебор паролей, которые чаще всего используются большинством людей, например qweqwe, 123123 и иже с ними
  • второй, более прогрессивный подход опишем далее. Многие люди используют один и тот же емэйл и пароль для регистрации на различных веб-сайтах. Это происходит, потому что так проще запомнить пароль. А теперь, представим, что на одном из таких сайтов была слабая защита и его взломали и «забрали» базу емэйлов-паролей, а пароли еще и не были защищены шифрованием… Теперь можно использовать эти «беспроигрышные» комбинации и на других сервисах. Самое неприятное здесь, что для защиты не помогает сложный пароль, каким бы сложным он не был. Что уж таить, взламывают и крупные сервисы, такие как соц сети и получают огромную базу, готовую к брутфорсу

Прежде чем углубляться в вопрос «Как», давайте осветим «Зачем» брутфорсят Ваш сайт.

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

Если же деньги вывести не удается, аккаунты можно продать другим злоумышленникам, особенно если средства/ценности есть на счету взломанных пользователей (тогда можно доказать ценности учетных записей скриншотами балансов).

Закрытые группы в фейсбуке, где продают учетные данные с сайтов или конфигурации для автоматизации взломов

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

Вернемся к вопросу «как» поподробнее.

Никто (или почти никто) не перебирает логины-пароли вручную. Для этого используют автоматизацию. Думаю, что инструментов для брутфорса множество. Один из самых популярных и известных мне, например SilverBullet. В ней можно выставлять различные параметры атаки, например количество запросов в секунду.

Пример конфигураций из закрытых групп в соц сетях

Так же, хакеры используют базу прокси-адресов (выделенных IP адресов) для того, чтобы их было сложнее заблокировать. Один IP адрес просто заблокировать средствами операционной системы или веб-сервера, а вот меняющиеся адреса — сложнее. Какое то количество IP адресов на относительно короткое время можно получить бесплатно (далее, по моим прикидкам один IP адрес будет стоить примерно 0.1 доллара в месяц). Регистрируются они на специализированных сайтах, которые их (прокси) продают легальным образом для безобидных целей. Но, как видите, часто используются для целей злоумышленников. Это базы прокси-адресов подключаются к программе брутфорса (той же SilverBullet). Так же туда подключаются другие параметры атаки, упомянутые ранее.

И атака запускается.

Поиск, подготовка и установка windows 11 без активации и без TPM

Подразумевается, что вы — счастливый обладатель более ранней виндовс. 

Это может быть 7я, Vista, 8я, или 10я версия.

1). Находим установочный образ с Виндовс 11

Можно пойти по простому пути, если у вас современный компьютер.

Дело в том, что какое то время, Microsoft, для установки Windows 11, требует довольно таки серьезное железо и поддержку технологии TPM у вашего процессора. 

Если вы уверены, что эти требования выполнены, можно скачать образ с сайта Майкрософта по ссылке

Загрузка образа виндовс с официального сайта

В случае, если вы не уверены, что ваше железо достаточно современно (или же планируете установить винду на виртуальной машине), то можно скачать заранее заготовленный под это дело образ используя AveYo’s Universal MediaCreationTool. 

В частности, скачиваем MediaCreationTool.zip  от сюда следующим образом:

Скачиваем тулу для нахождения образа windows 11

Распаковываем и запускаем файл MediaCreationTool.bat

Интерфейс тулы для скачивания образа 11 виндовс

Выбираем пункт “11” как на скриншоте

Тут же можно выбрать действие, например скачать ISO (Make ISO) или создать загрузочную флешку (Make USB).

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

Конечный образ занимает приблизительно 4 гигабайта.

2). Создаем загрузочных флешку

Разумеется, нужна сама USB флешка. Не менее 8 гигабайт. Вставьте ее в USB-разъем вашего компьютера.

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

скачиваем последнюю версию программы для загрузочных флешек

… Скачиваем, запускаем, выбираем ранее созданный образ Винды и выставляем настройки на на скриншоте (для загрузочной флешки):

Настройки программы по формированию загрузочной флешки виндовс 11

Схема раздела: MBR.

Нажимаем старт и ожидаем окончания операции.

Загрузочная флешка готова. Осталось с нее поставить Windows 11.

3). Установка Windows 11 с загрузочной флешки

По факту, далее, процесс установки Виндовс 11 принципиально ничем не отличается от установки любой другой виндовс. 

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

Чтобы запустить процесс установки с USB флешки, эта флешка должна быть вставлена в разъем USB 🙂

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

В биосе (обычно в разделе Advance) меняем порядок загрузки — подымаем наверх USB Flash. Сохраняем (обычно F10). Система перезагружается и, через какое то время появляется окно установки Windows 11.

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

На окне активации, где предлагают ввести ключ активации, если у вас его нету, Выбираем соответствующий пункт (что-то вроде “У меня нету ключа активации” или “I don’t have a product key”). 

Если вам понравится эксплуатация новой Виндовс, позже сможете ее активировать, для лучшего пользовательского опыта

Установка скомпилированной версии v8js в Ubuntu или CentOS для server-side rendering

  • Скачаем архив со скомпилированной версией расширения v8js.so

Получаем рут права

> sudo su
  • Создаем временную папку для скачивания и заходим в нее
# mkdir -p /opt/google
# cd /opt/google
  • Сохраняем архив с расширением для рендеринга на серверной стороне
# wget https://blog.bayrell.org/media/files/archives/v8-ubuntu-18.04-x64-6.4.388.18-2.1.0.tar.gz
  • Распаковываем архив тут же
# tar xvf v8-ubuntu-18.04-x64-6.4.388.18-2.1.0.tar.gz
  • Далее необходимо скопировать расширение в папку расширений для вашего PHP
    Получить папку с расширениями можно следующей командой
# php -i | grep extension_dir

Ниже можно увидеть результат команды

тогда копируем расширение в эту папку, в нашем случае это:

# cp /opt/google/v8/6.4/v8js.so /usr/lib64/php/modules
  • А теперь нужно добавить это расширение в ini конфиг php
    получаем папку, в которой хранятся дополнительные ini конфиги
# php -i | grep "additional .ini files"

Вывод будет примерно как на скриншоте ниже

Заходим в папку и создаем ini файл для v8js расширения
В нашем случае это:

# cd /etc/php.d
# nano 50-v8js.ini

И вставляем в файл следюущий код:

extension=v8js.so

Сохраняем файл (CTRL+O, CTRL+X)

  • Теперь можем проверить работоспособность установленного расширения
    Переходим в какую то временную папку на сервер и создаем тестовый php файл
# nano test_v8js.php

В который вставляем следующий код:

<?php
$v8js = new V8Js();
$JS = <<< EOT
  var s = 'Hello world';
  s;
EOT;
$r = $v8js->executeString($JS);
var_dump($r);

В случае успеха увидим вывод в консоли:

string(11) "Hello world"

Если, в качестве менеджера процессов вы используете, например, php-fpm — необходимо его перезагрузить

# systemctl restart php-fpm

Если у вас PHP 7.4 или инструкции выше не работают, можно обратиться к процедуре компиляции V8Js из официальных репозиториев для Ubuntu 20 или Ubuntu 22

Jenkins — git — собираем проект из приватного репозитория

Генерируем на целевом сервере SSH ключ

Чтобы Jenkins на нашем сервере смог получить доступ к коду из репозитория — необходимо сгенерировать приватный и публичный ключ и раздать их в соответствии с назначением.
Для генерации ключей, в терминате (консоли) сервера вводим команду

$ ssh-keygen

При этом видим предложение сгенерировать ключ по стандартному для этого случая пути

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user01/.ssh/id_rsa):

Рекомендуется выбирать дефолтный путь — жмем Enter, но вы можете и поменять путь.

Далее система попросит ввести passphrase. Для простоты можем оставить это поле пустым, как и следующее (подтверждающее ввод)

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Успешная генерация ключа сопровождается следующим выводом в консоли

Your identification has been saved in /Users/emmap1/.ssh/id_rsa.
Your public key has been saved in /Users/emmap1/.ssh/id_rsa.pub.
The key fingerprint is:
4c:80:61:2c:00:3f:9d:dc:08:41:2e:c0:cf:b9:17:69 emmap1@myhost.local
The key’s randomart image is:
+—[ RSA 2048]—-+
|*o+ooo.          |
|.+.=o+ .         |
|. *.* o .        |
| . = E o         |
|    o . S        |
|   . .           |
|     .           |
|                 |
|                 |
+——————+

Выведем сгенерированные файлы списком на экран

$ ls ~/.ssh
id_rsa id_rsa.pub

Выводится 2 файла:

id_rsa — приватный ключ, который понадобится нам для генерациия пользователя аутентификации в репозитории на cтороне Jenkins

id_rsa.pub — публичный ключ, который необходимо разместить в разделе access keys целевого репозитория

Добавляем публичный ключ в разделе ключей приватного репозитория

Например, в Bitbucket, публичный ключ можно добавить в разделе
Repository settingsAccess keysAdd key (настройки конкретного репозитория)

Добавляем приватный ключ в Jenkins

Заходим в раздел Управления Ключами (JenkinsManage JenkinsManage Credentials)

И добавляем приватный ключ (содержимое файла id_rsa.pub) в поле Private key, как проиллюстрировано ниже

Заполняем поле Username — имя для пользователя. Сохраняем.

Осталось подключится к репозиторию.

Перейдем в настройки ранее созданного проекта в Jenkins.

Source Code Management — выбираем Git (1)

Repositories — вставляем ссылку на репозиторий (2) и из выпадающего списка выбираем нашего только что созданного пользователя с приватным ключом (3)

Branches to build — обычно указывают мастер ветку — */master (4)

Сохраняем проект в Jenkins.

Теперь мы готовы собрать проект из приватного репозитория.

Установка Redis на MacOS, Debian, Ubuntu, Centos

MacOS (Catalina)

(Если вам необходимо установить Redis на Mac c процессором семейства M — есть отдельная инструкция)

Открываем терминал (Terminal.app) и обновляем локальные пакеты:

> brew update

Устанавливаем Редис одной командой

> brew install redis

В процессе успешной установки увидим подобные сообщения:

$ brew install redis
==> Downloading https://homebrew.bintray.com/bottles/redis-5.0.6.catalina.bottle
==> Downloading from https://akamai.bintray.com/8a/8ae4fed5494daa20391ab16d4be0b
################################################################## 100.0%
==> Pouring redis-5.0.6.catalina.bottle.tar.gz
==> Caveats
To have launchd start redis now and restart at login:
brew services start redis
Or, if you don’t want/need a background service you can just run:
redis-server /usr/local/etc/redis.conf
==> Summary
/usr/local/Cellar/redis/5.0.6: 13 files, 3.1MB

Redis успешно установлен. Запустим процесс, чтобы он работал в бекграунде:

> brew services start redis

В случае успешного запуска увидим подобное сообщение:

==> Successfully started redis (label: homebrew.mxcl.redis)

Это все. Процесс установки и запуска завершен.
Проверим работоспособность запущенного редис-сервиса

redis-cli ping

Если видим вывод “PONG” значит все прошло успешно и редис готов к работе.

Linux (Debian, Ubuntu)

Открывает терминал, переходим в домашнюю папку для скачивания архива с Редисом:

$ cd ~/

Скачиваем архив с установочными файлами Redis (последняя стабильная версия):

$ curl -s -o redis-stable.tar.gz "http://download.redis.io/redis-stable.tar.gz"

Далее выполняем команды под рутом — командой получаем права:

$ sudo su

Создаем необходимую папку (флаг -p означает, что создаем ее только в случае если ее нету)

# mkdir -p /usr/local/lib/

И назначаем права

# chmod a+w /usr/local/lib/

Разархивирует в нее архив с файлами Редис:

# tar -C /usr/local/lib/ -xzf redis-stable.tar.gz

Удаляем файл архива — он нам больше не нужен

# rm redis-stable.tar.gz

Переходим в папку с файлами Редиса

# cd /usr/local/lib/redis-stable/

И устанавливаем его (так как это установочные файлы написанные на языке C)

# make && make install

Проверим уставлен ли Редис, выведя его версию

# redis-cli --version

Далее, как рекомендуется в официальной документации, запускаем скрипт конфигурирования. Перейдем в его папку

# cd /usr/local/lib/redis-stable/utils/

И запускаем его

# sh install_server.sh

В процессе работы скрипт будет задавать вопросы (например, на каком порте будет работать Редис сервер). Вполне достаточно оставлять ответы по умолчанию — жмем все время Enter.
В результате скрипт настроит редис, соберет конфигурации, сформирует и добавит сервис в автозагрузку
После этого можно запустить Редис командой

# service redis_6379 start

Linux (CentOS)

Открывает терминал, обновляем установленные пакеты (для некоторых версий может быть важно)

$ sudo yum -y update

Убеждаемся, что необходимые для установки Редис пакеты и утилиты установлены

$ sudo yum -y install scl-utils
$ sudo yum -y install centos-release-scl devtoolset-7 llvm-toolset-7
$ sudo scl enable devtoolset-7 llvm-toolset-7 bash
$ sudo yum -y install gcc gcc-c++ make

Переходим в домашнюю папку для скачивания архива с Редисом:

$ cd ~/

Скачиваем архив с установочными файлами Redis:

$ curl -s -o redis-stable.tar.gz "http://download.redis.io/redis-stable.tar.gz"

Далее выполняем команды под рутом — командой получаем права:

$ sudo su

Создаем необходимую папку (флаг -p означает, что создаем ее только в случае если ее нету)

# mkdir -p /usr/local/lib/

И назначаем права

# chmod a+w /usr/local/lib/

Разархивирует в нее архив с файлами Редис:

# tar -C /usr/local/lib/ -xzf redis-stable.tar.gz

Удаляем файл архива — он нам больше не нужен

# rm redis-stable.tar.gz

Переходим в папку с файлами Редиса

# cd /usr/local/lib/redis-stable/

И устанавливаем его (так как это установочные файлы написанные на языке C)

# make && make install

Проверим уставлен ли Редис, выведя его версию

# redis-cli --version

Если, при этом, будет выведено сообщение об ошибке “command not found” — необходимо добавить /usr/local/bin в переменную среды PATH таким образом

# export PATH="$PATH:/usr/local/bin"

И вновь проверить успешно ли установлен Редис, как описано выше
Далее, как рекомендуется в официальной документации, запускаем скрипт конфигурирования. Перейдем в его папку

# cd /usr/local/lib/redis-stable/utils/

И запускаем его

# sh install_server.sh

Если в процессе будет выведена ошибка ”… This system seems to use systemd. Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry! “ — необходимо внести небольшое изменение в скрипт установки install_server.sh:

# nano install_server.sh

Закомментировать следующие строки

# bail if this system is managed by systemd
# _pid_1_exe=»$(readlink -f /proc/1/exe)»
# if [ «${_pid_1_exe##*/}» = systemd ]
# then
# echo «This systems seems to use systemd.»
# echo «Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!»
# exit 1
# fi
# unset _pid_1_exe

Сохранить файл и запустить его.
В процессе работы скрипт будет задавать вопросы (например, на каком порте будет работать Редис сервер). Вполне достаточно оставлять ответы по умолчанию — жмем все время Enter.
В результате скрипт настроит редис, сформирует конфигурации, сформирует и добавить сервис в автозагрузку
Проверим работу сервера
При этом сам сервис Редеем запускается командой

$ redis-cli

127.0.0.1:6379> ping
PONG

$ service redis_6379 start

Nginx basic auth — аутентификация для сайта или папки сайта на Linux

Иногда возникает желание поставить аутентификацию (запаролить) сайт или же папку на сайте.

Например:

  • Для области администрирования
  • Проводятся работы по разработке и рано открывать область или функционал широкому кругу пользователей
  • Область, предназначенная только для разработки
  • Необходимо закрыть от индексирования (не через специальные файлы, а совсем)
  • Есть желание предоставлять доступ к области только для ограниченного круга лиц
  • Другие причины

Генерация аутентификационного файла

Такого рода аутентификация называется Basic auth (или Http auth), подразумевает ввод логина и пароля и выглядит следующим образом

При этом, если логин и пароль не введен или введен не верно — выдает 401ю ошибку

Обычно, файл, в котором хранятся логин и зашифрованный пароль, находится по пути:

/etc/nginx/.htpasswd

Проверим, существует ли уже такой файл

$ sudo su
# cat /etc/nginx/.htpasswd

И если он не существует, создадим такой файл с пользователем user01

# htpasswd -c /etc/nginx/.htpasswd user01

Система предложит 2 раза ввести пароль, который мы заранее подготовили и сохранили. Именно этот логин (user01) и пароль будут использованы для аутентификации

Если же файл .htpasswd существует, можно добавить пользователя таким образом

# htpasswd -c /etc/nginx/.htpasswd user02

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

Если введенные пользователь (user02) уже существует — таким образом, мы просто поменяем ему пароль…

Конфигурирование Nginx

Следующий шаг — внедрение аутентификации в конфигурацию сайта Nginx. При этом, можно закрыть как весь сайт, расположив строчки:

auth_basic "Restricted area";
auth_basic_user_file /etc/nginx/.htpasswd

На уровне server:

server {
    .…
    auth_basic "Restricted area";
    auth_basic_user_file /etc/nginx/.htpasswd
    ….
}

Так и на уровне какой то области (папки), в примере ниже в зоне «admin»:

server {
    .…
    location /admin {
        ….
        auth_basic "Restricted area";
        auth_basic_user_file /etc/nginx/.htpasswd
        ….
    }
    ….
}


После добавления в конфигурацию сайте — не забываем перезагрузить nginx.

Исключения для определенных IP

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

{
    …
    satisfy any;
    allow 11.22.33.44; # whitelisted IP 1
    allow 22.33.44.55; # whitelisted IP 2
    …
    deny all;
    auth_basic "Restricted area";
    auth_basic_user_file /etc/nginx/.htpasswd;
    …
}

Основные команды Linux для начинающего администратора

Общие команды

Подключаемся к серверу по SSH

$ ssh -i {path_to_PEM_file} {user_name}@{IP_address}

Получаем рут права (многие серьезные команды требуют рут права)

$ sudo su

Просматриваем историю предыдущих команд

# history

Очищаем окно терминала от текста

# clear

Выходим из под юзера или из удаленного сервера

# exit

Работа с директориям

Перейти в директорию

# cd {folder_name}

На уровень выше

# cd ..

В домашнюю папку пользователя

# cd ~/

В самую корневую папку

# cd /

Показываем список папок и файлов (простой вывод)

# ls

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

# ll

создаем новую папку

# mkdir

изменяем владельца файла или папки (рекурсивно)

# chown apache:apache /var/www/domain-web/ -R

изменяем права доступа к файлу или папке (рекурсивно)

# chmod 775 /var/www/domain-web/ -R

распечатываем текущий путь (к каталогу)

# pwd

поиск файлов или папок по шаблону названия

# find {template}

поиск текста по шаблону (в файлах)

# grep {template}

Пример поиска команды в истории по фильтру-шаблону

# history | grep {word_to_search}


Работаем с файлами 

Выводим содержимое файла в консоль

# cat {file_path/file_name}

Выводим последние 100 строк (удобно если большой файл)

# tail -100 {file_name}

Смотрим изменения в файле в режиме реального времени

# tail -f {file_name}

редактируем файл, если файла нету — он создается

# nano {file_name}

CTRL+O — сохраняем изменения

CTRL+X — закрываем файл

очищаем файл (например, чтобы отредактировать с нуля) без его удаления

# echo '' > {file_name}

очищаем файл и сразу переходим к редактированию

# echo '' > {file_name} && nano {file_name}

удаляем файл или каталог (рекурсивно)

# rm -rf {file_name}

копируем файл (например, делаем бекап конфига перед редактированием)

# cp {file_path/file_name} {new_file_path/file_name}

Просмотр расписания cron (у каждого системного пользователя он свой)

# crontab -l

Редактирование расписания cron

# crontab -e

Тоже, но через nano редактор

EDITOR=nano crontab -e


Просматриваем статистику о системе

анализ свободного/занятого дискового пространства

# df -h

показывает размер файла или каталога

# du -chs {directory 1} {directory 2}

показывает размер каталогов (или файлов), в том числе скрытых, с сортировкой по размеру

# du -chs .[!.]* * | sort -h

Просмотр информации о ресурсах операционной системы и запущенных процессах

# top

Тоже что top, но более интерактивно

# htop


Сервисы

Просмотр всех сервисов и их статусов

# service --status-all

Статус, старт, рестарт и стоп сервиса

# service nginx status

# service php-fpm start

# service redis-server restart

# service searchd stop


Бонус — команды посложнее

Выводим список с детальной информацией о процессах системы, которые в названии имею строчку «php»

ps aux | grep "php"

Подключится к mysql серверу

mysql -u {user_name} -p -h {server_name}

количество соединений к серверу с группировкой по статусам

# ss -tan | awk '{print $1}' | sort | uniq -c

количество соединений к серверу с группировкой по статусам — в реальном времени

# watch -n1 'ss -tan | awk '\''{print $1}'\'' | sort |  uniq -c'

AWS: EC2 — изменение типа инстанса и EBS — изменение размера хранилища

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

Расскажу, как это сделать гораздо быстрее и безопаснее.

Изменяем тип инстанса EC2

Например, если вам понадобились дополнительные мощности и вы готовы к переходу на более производительный сервер

  • В разделе EC2 переходим в под-раздел Instances
  • Останавливаем целевой инстанс — выбираем инстанс и затем нажимаем ActionsInstance StateStop
  • Как только сервер будет остановлен изменяем его тип: ActionsInstance SettingsChange Instance Type
  • Выбираем необходимый тип и подтверждаем выбор — Apply
  • Стартуем измененный инстанс: ActionsInstance StateStart

Таким образом, можно изменять мощность как в большую сторону, так и в меньшую

Изменяем размер жестного диска EBS

  • В разделе EC2 переходим в подраздел  Elastic Block StoreVolumes
  • Выбираем именно тот Volume (жесткий диск) который нам необходим — идентифицируем его или по тегам, которые мы составляли при добавления Volume к нашему серверу при создании или же по столбцу Attachment information
  • Далее: ActionsModify Volume
  • Устанавливаем новый размер хранилища Size и, затем, Modify

Так мы увеличили размер хранилища. Осталось внести изменения в системе, для расширения основного раздела жесткого диска.

Далее инструкция будет для Linux (CentOS в частности, а для других систем можно обратиться к официальной документации)

Соединяемся с сервером по SSH. Затем получаем рут права

$ sudo su

Выводим список блоков хранения, прикрепленных к серверу

# lsblk

Обычно, основной блок имеет имя nvme0n1, закидываем на него не привязанную память

# growpart /dev/nvme0n1 1

Удостоверяемся что память привязана

# lsblk

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

# df -h

И применяем изменения к основному разделу (чаще всего это /dev/nvme0n1p1)

# sudo resize2fs /dev/nvme0n1p1

Удостоверимся, что изменения произошли успешно

# df -h

Готово! При этом, перезагрузка сервера не требуется.

Файл подкачки Swap file на Centos

Вполне возможно, можем столкнуться с нехваткой оперативной памяти для выполнения какого то процесса на нашем сервере. Если такое случается постоянно — возможно следует подумать о расширении сервера — в плане RAM. 

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

Cannot allocate memory

Которая не дает окончить желаемое действие.

В этом случае, на помощь приходит файл подкачки, swap file, который становится, своего рода продолжением оперативной памяти. При этом он хранится и потребляет память жесткого диска. А он, как известно, заметно дешевле RAM.

Итак, прежде всего, нужно проверить, имеем ли мы свободное место на HDD

$ sudo su
# df -h

В нашем случае, свободно 55 гигабайт из 59-ти. 

Так же, давайте, проверим не создавали ли файла подкачки ранее

# swapon -s

Если вывод пустой — значит не создавали

Создадим файл подкачки на 1 Гигабайт (если необходимо больше — выставляем большее значение вместо выделенной цифры 1024 мб)

# dd if=/dev/zero of=/swapfile count=1024 bs=1MiB

Проверяем результат

# ls -lh /swapfile

Изменим режим доступа для файла — мера безопасности

# chmod 600 /swapfile

Теперь, активируем его

# mkswap /swapfile
# swapon /swapfile

Проверяем, что система видит его

# swapon -s

Однако, после перезагрузки он исчезнет, если не добавить его в загрузку

# nano /etc/fstab

И, в конец файла добавляем следующий код

/swapfile   swap    swap    sw  0   0

Сохраняем файл (CTRL+O) и закрываем (CTRL+X)

Готово!