Архив метки: Настройка web сервера

Как в UBUTNU 20.04 LTS узнать количество пакетов, требующих обновления?

Кто-то использует update-notifier, занимающий 500 мб и выводящий результаты каждый раз при авторизации по ssh, а мы рекомендуем не устанавливать лишний софт и использовать следующую команду:




apt-get -s dist-upgrade | grep "^[[:digit:]]+ upgraded"




В случае, если обновлять ничего не нужно, то результат команды будет следующим:




0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.




Если обновлять что-либо нужно, то код будет похож на нижеследующий:




111 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.




ПОДРОБНЕЕ: https://unix.stackexchange.com/questions/105463/machine-readable-number-of-updates-alternative-to-usr-lib-update-notifier-apt



2022-06-24T04:09:15
Настройка web сервера

Утилита htop, установка и примеры использования в Ubuntu 20.04 LTS и других версиях в 2022 году

htop — продвинутый монитор процессов, написанный для Linux. Он был задуман заменить стандартную программу top. Htop показывает динамический список системных процессов, список обычно выравнивается по использованию ЦПУ. В отличие от top, htop показывает все процессы в системе. Также показывает время непрерывной работы, использование процессоров и памяти. Htop часто применяется в тех случаях, когда информации даваемой утилитой top недостаточно, например при поиске утечек памяти в процессах. Htop написан на языке Си и использует для отображения библиотеку Ncurses. Я всегда ставлю его при установке системы и моментально забываю про утилиту top.




Установка производится из стандартного репозитория командой:




sudo apt install htop




Команда запуска:




htop




Для выхода используем клавишу F10 или комбинацию клавиш CTRL+C




Столбцы в утилите HTOP:




PID — идентификатор процесса.
USER — владелец процесса.
PRI — текуший приоритет (влияет на процессорное время, отводимое процессу, значение по умолчанию — 20; чем меньше приоритет, тем больше времени отводится процессу, следовательно он выполняется быстрее).
NI — величина изменения приоритета относительно значения PRI (клавиши F7, F8).
VIRT — общий объем виртуальной памяти, используемой процессом. Включает в себя: область кода (CODE), данные (DATA), разделяемые библиотеки (SHARED) и страницы, перемещенные в swap-область памяти. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, данный столбец всё равно будет показывать цифру 100.
(CODE — объем памяти, содержащий исполняемый код процесса.
DATA — объем памяти, занятой данными, используемыми процессом в ходе выполнения.
SWAP — объем памяти, используемой процессом, но перемещенной в swap-область.)
RES — количество резидентной (не перемещаемой в swap) памяти в килобайтах. Если приложение потребовало от ядра выделить ему 100Мб памяти, а использует всего 5 Мб, то данный столбец покажет 5. Но здесь есть два ньюанса: 
а) RES не показывает сколько данных было перемещено в swap, 
б) часть RES-памяти может быть разделяемой.
SHR — количество разделяемой (shared) памяти программы в килобайтах, т.е. памяти, которая может быть использована другими приложениями.




S — состояние процесса:
S — так называемое состояние сна;
R — состояние выполнения;
D — состояние ожидания.




CPU% — использование процессора в процентном отношении.
MEM% — использование процессом памяти в процентном отношении.
TIME+ — время работы процесса.
Command — указывает на команду, которой был запущен процесс.
Через настройки (F2) можно добавить еще некоторые полезные параметры:
IO RATE — Операции вводавывода. Чтение + запись. Если нужно отдельно на чтение и на запись, то можно добавить:
IO READ RATE и IO WRITE RATE.
Также на экран выводятся следующие параметры:
Load average — отражает число блокирующих процессов в очереди на исполнение в определенный временной интервал, а именно 1 минута, 5 минут и 15 минут, соответственно. Блокирующий процесс — это процесс, который ожидает ресурсов для продолжения работы.
Uptime — время работы системы.




Управление HTOP




F1 — справка;
F2 — настройки;
F3 — поиск процесса;
F4 — сортировка списка процессов (от большего к меньшему или от меньшего к большему);
F5 — устанавливает древовидное отображение (корни — родительские процессы, а листья — дочерние) и наоборот;
F6 — открывает панель с выбором параметра сортировки процессов;
F7 — увеличить приоритет выполнения текущего процесса;
F8 — уменьшить приоритет выполнения текущего процесса;
F9 — убить процесс;
F10 — выйти из программы.



2022-06-24T03:00:29
Настройка web сервера

Как разбить архив tar.gz на части при создании на UBUNTU 18.04 LTS в 2023 году

Бывает так, что нужно создать архив и разделить его на части, например, для того, чтобы закинуть на бесплатное облако@mail.ru.




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




 tar -cvzf - /home/foldername | split -b 2048m - "filename.tar.gz-part-" 




После чего архив будет поделен на части по 2048Мб или же 2Гб.




Если архив у нас уже готов, и его нужно разбить на части, то команда будет другая:




 split -b 2048m /home/mybackup.tar.gz "filename.tar.gz-part-" 





Читать

Как настроить автоматический перезапуск nginx/apache/mysql на UBUNTU 18.04/20.04 LTS в случае падения

Как автоматически перезапустить сервис в Ubuntu на примере UBUNU 18.04/20.04 LTS при помощи ежеминутной проверки через CRON^




Открываем плаинровщик крон при помощи следующей команды:




crontab -e




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




#Ежеминутно проверяем работу apache2, если не работает -- перезапускаем
 * * * * ps -A | grep apache2 > /dev/null 2>&1 || /etc/init.d/apache2 restart > /dev/null 2>&1 




Для проверки и перезапуска nginx следующую строку:




Ежеминутно проверяем работу nginx, если не работает -- перезапускаем
 * * * * ps -A | grep nginx > /dev/null 2>&1 || /etc/init.d/nginx restart > /dev/null 2>&1 




Для проверки работы и перезапуска mysql/mariadb:




Ежеминутно проверяем работу MySQL, если не работает -- перезапускаем
 * * * *       /etc/init.d/mysql status >> /var/log/mysql/mysql_status_check.log || /etc/init.d/mysql restart  > /var/log/mysql/restart_by_cron_date '+log_%Y.%m.%d_%H:%M:%S'.log



2021-03-01T02:08:54
Настройка web сервера

Как заблокировать ip на UBUNTU 16.04/18.04/20.04 LTS & etc через iptables

Генератор правил iptables online:




https://www.perturb.org/content/iptables-rules.html







Описание цепочек iptales




Input — обрабатываются входящие подключения вроде подключения по протоколу SSH или при отправке на веб-сайт каких-либо файлов.
Forward —  цепочка формируется при активации проходящего соединения, когда информация предназначена «третьему» компьютеру, а текущий сервер выполняет роль маршрутизатора.
Output —  исходящие пакеты данных, например, при запуске какого-либо сайта в браузере или при проверке скорости соединения и доступности PING.
В реальной работе сервера постоянно формируется минимум два вида пакетов – Input и Output. Т.к. на каждый запрос пользователя сервер обязан дать ответ (сначала о поступлении данных на сервер, а затем и о результате обработки) или отклонить вредоносный запрос. Если «принято решение» отказать в доступе, об этом также сообщается пользователю (REJECT). Иначе запрос зависнет, и пользователь будет видеть пустой экран (DROP).




Примеры действий iptables




  • ACCEPT – пропустить пакет данных далее по цепочке;
  • DROP – полностью удалить пакет;
  • REJECT – отклонить запрос и направить пользователю ответ с информацией об этом;
  • LOG – инициируется запись в лог-файл об обработанном пакете;
  • QUEUE – отправка данных на компьютер пользователя.




Правила проверки устанавливаются в зависимости от характера соединения. Возможен мониторинг IP-адреса, порта подключения, отправителя, заголовка. Если пакет не проходит хотя бы по одному критерию, осуществляется действие ACCEPT (сквозное пропускание пакета, который не требуется блокировать файрволом). Фильтрация возможна на двух этапах:




  • prerouting – система только получила пакет, и нет команды «что с ним делать»: обрабатывать на сервере, возвращать пользователю или пропускать насквозь;
  • postroutnig – обработка после оценки «пункта назначения».




Таблицы iptables




Существует еще один «уровень» обработки – это таблицы, содержащие правила обработки тех или иных действий над пакетами. Например, фильтрация данных в Iptables осуществляется в таблице filter.




Варианты таблиц iptables:




  • raw – предназначен для работы с «сырыми» данными, еще не прошедшими обработку;
  • mangle – используется для модификации пакетов;
  • nat – обеспечивает работу сервера в качестве маршрутизатора;
  • filter – основная таблица, используемая «по умолчанию».




Cинтаксис запуска iptables




iptables -t таблица действие цепочка дополнительные_параметры




Перечень основных действий iptables




  • -A – добавить правило в цепочку;
  • -C – проверить применяемые правила;
  • -D – удалить текущее правило;
  • -I – вставить правило с указанным номером;
  • -L – вывести правила текущей цепочки;
  • -S – вывести все активные правила;
  • -F – очистить все правила;
  • -N – создать цепочку;
  • -X – удалить цепочку;
  • -P – установить действие «по умолчанию».




Дополнительные параметры iptables




  • -p – вручную установить протокол (TCP, UDP, UDPLITE, ICMP, ICMPv6, ESP, AH, SCTP, MH);
  • -s – указать статичный IP-адрес оборудования, откуда отправляется пакет данных (ip-источник);
  • -d – установить IP получателя;
  • -i – настроить входной сетевой интерфейс;
  • -o – то же самое в отношении исходящего интерфейса;
  • -j – выбрать действие при подтверждении правила.




Как показать текущие правила iptables?




iptables -L

iptables -L INPUT

iptables -L INPUT -n -v

iptables -L --line-numbers




Образец вывода:




Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DROP       all  --  123.123.123.101      anywhere
2    REJECT     all  --  123.123.123.102      anywhere             reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination




Как сбросить все правила iptables?




sudo iptables -F

sudo iptables -F Input




Правила iptables «по умолчанию»




Разрешаем все цепочки INPUT и OUTPUT, запрещаем FORWARD.




sudo iptables -p INPUT ACCEPT

sudo iptables -p OUTPUT ACCEPT

sudo iptables -p FORWARD DROP




Как заблокировать ip или ip подесть в iptables?




sudo iptables -t filter -A INPUT -s 123.456.789.101 -j DROP
или
sudo iptables -t filter -A INPUT -s 123.456.789.101/32 -j DROP




Как разблокировать ip или ip подесть в iptables?




sudo iptables -t filter -D INPUT -s 123.456.789.101 -j DROP
или
sudo iptables -t filter -D INPUT -s 123.456.789.101/32 -j DROP




Схема движения пакетов по цепочкам в различных таблицах iptables







Сохранение правила Iptables




В Ubuntu 16.04-20.04 процесс требует ввода команды:




sudo /sbin/iptables-save > /dir/filename




Официальный мануал по iptables




https://ipset.netfilter.org/iptables.man.html




подробнее: https://losst.ru/kak-zablokirovat-ip-v-iptables




Полезные команды iptables




Сброс всех правил iptables при помощи cron




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




Открываем таблицу заданий cron:




crontab -e




Вписываем следующее правило:




#каждые 30 минут очищаем все правила iptables и делаем действием по умолчанию для всех цепочек ACCEPT
*/30 * * * *	sleep 1 &&	/sbin/iptables	-P INPUT ACCEPT			> /dev/null 2>&1
*/30 * * * *	sleep 2 &&	/sbin/iptables	-P OUTPUT ACCEPT		> /dev/null 2>&1
*/30 * * * *	sleep 3 &&	/sbin/iptables	-P FORWARD ACCEPT		> /dev/null 2>&1
*/30 * * * *	sleep 4 &&	/sbin/iptables	-F						> /dev/null 2>&1




Теперь в случае ошибки сервер каждые 30 минут будет сбрасывать все настройки iptables. После настройки не забываем удалить данное правило и проверить сохранность всех внесенных изменений!




Сбросить счетчики iptables




В iptables для каждой цепочки и каждого правила есть два счетчика — счетчик обработанных пакетов и счетчик пропущенного / заблокированного трафика. Их можно посмотреть командой:




iptables -nvL




Иногда вам потребоваться их обнулить, это делается следующей командой:




iptables -Z




Как в одном правиле iptables добавить сразу несколько (диапазон) портов




Для этого используем следующее выражение




-m multiport --dports 80,443




***********************
#При помощи следующей команды смотрим номер правила, которое нам здесь необходимо удалить:
iptables -L INPUT --line-number

#Запомним номер и удалим правило под номером 2
iptables -D INPUT 2
***********************


############## дополнительно
#Отклоняем все подключения на порт 80 и 443 порт сервера c ip# 37.120.136.252:
iptables -A INPUT -p tcp -s 37.120.136.252 -m multiport --dports 80,443 -j REJECT

#Блокируем без ответа все подключения на порт 80 и 443 сервера c ip# 37.120.136.252:
iptables -A INPUT -p tcp -s 37.120.136.252 -m multiport --dports 80,443 -j DROP



2021-02-01T03:41:13
Настройка web сервера

Установка MariaDB (ex.MySQL) на Ubuntu server 20.04 LTS в 2021 году.

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




Т.е. все потихоньку избавляются от MySQL сервера и заменяют его на MariaDB, то вот вам пятишаговая инструкция по установке на убунту.




MariaDB — это система управления реляционными базами данных с открытым исходным кодом, которая часто используется в качестве альтернативы MySQL(которая теперь принадлежит Oracle) в составе популярного набора LAMP (Linux, Apache, MySQL, PHP/Python/Perl). Она представляет собой упрощенную замену MySQL.




На момент написания текста в репозиториях APT по умолчанию в Ubuntu 20.04.1 содержалась версия MariaDB Server version: 10.3.25




0. Обновляем индекс пакетов на сервере с помощью apt:




sudo apt update




  1. Установка сервера:




sudo apt install mariadb-server




Эти команды выполнят установку MariaDB, но не будут запрашивать настройку пароля или внесение других изменений в конфигурацию. Т.к. в начальном кофиге установка MariaDB осуществляется небезопасным образом, мы будем использовать скрипт из пакета mariadb-server​​​ для ограничения доступа к серверу и удаления неиспользуемых учетных записей.




2. Настройка MariaDB server. После установки запускаем встроенный скрипт безопасности. Этот скрипт меняет ряд наименее защищенных опций, используемых по умолчанию, для таких функций, как, например, удаленный вход для пользователя root и тестовые пользователи/бд. Запускаем скрипт безопасности:




sudo mysql_secure_installation




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




2.1. В первом диалоге вам нужно будет ввести пароль пользователя root для текущей базы данных. Поскольку мы еще не настроили его, нажмите ENTER, чтобы указать «отсутствует».




NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB       SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user.  If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none):




2.2. В следующем диалоге вам будет предложено задать пароль для пользователя root базы данных. В Ubuntu учетная запись root для MariaDB тесно связана с автоматизированным обслуживанием системы, так что мы не должны изменять настроенные методы аутентификации для этой учетной записи. Это позволит нам обновить пакет для уничтожения системы базы данных посредством удаления доступа к административной учетной записи. Введите N и нажмите ENTER.




. . .
 OK, successfully used password, moving on…
 Setting the root password ensures that nobody can log into the MariaDB
 root user without the proper authorisation.
 Set root password? [Y/n] N




Далее вы можете использовать клавиши Y и ENTER, чтобы принять ответы по умолчанию для всех последующих вопросов. Выбрав эти ответы, вы удалите ряд анонимных пользователей и тестовую базу данных, отключите возможность удаленного входа пользователя root и загрузите новые правила, чтобы внесенные изменения немедленно имплементировались в MariaDB.




Мы завершили первоначальную настройку конфигурации безопасности MariaDB. Следующий шаг необязателен, но его следует выполнить, если вы предпочитаете использовать пароль для аутентификации на сервере MariaDB.




3. Создание административного пользователя с аутентификацией по паролю.




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




Поскольку для ротации журналов, запуска и остановки сервера используется учетная запись root, лучше всего не менять учетные данные root. Изменение учетных данных в файле конфигурации /etc/mysql/debian.cnf может работать на начальном этапе, но при обновлении пакета изменения могут быть перезаписаны. Вместо изменения учетной записи root, мантейнеры пакетов рекомендуют создать отдельную административную учетную запись для доступа по паролю.




Для этого мы создадим новую учетную запись superadmin с теми же привилегиями, что и у учетной записи root, но настроенную для аутентификации с использованием пароля. Откройте в терминале командную строку MariaDB:




sudo mariadb




Затем создадим нового пользователя с правами root и с аутентификацией на основе пароля. Измените имя пользователя и пароль на предпочитаемые:




GRANT ALL ON *.* TO 'superadmin'@'localhost' IDENTIFIED BY 'YOURsuperPASSWORD' WITH GRANT OPTION;







superadmin — заменяем на желаемый логин
YOURsuperPASSWORD — заменяем на желаемый пароль




Очищаем привилегии, чтобы они были сохранены и доступны в текущем сеансе:




FLUSH PRIVILEGES;




Теперь можно выходить из MariaDB:




exit




4. Тестирование MariaDB:
При установке из репозиториев по умолчанию MariaDB будет запускаться автоматически. Чтобы проверить это, проверьте ее статус.




sudo systemctl status mariadb




Вы получите вывод, который будет выглядеть примерно так:




● mariadb.service - MariaDB 10.3.25 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-01-01 00:00:01 MSK; 32min ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Main PID: 33506 (mysqld)
Status: "Taking your SQL requests now…"
Tasks: 31 (limit: 125068)
Memory: 67.3M
CGroup: /system.slice/mariadb.service
└─33506 /usr/sbin/mysqld
...




Если MariaDB не запущена, вы можете воспользоваться командой sudo systemctl start mariadb для запуска.




В качестве дополнительной проверки вы можете попробовать подключиться к базе данных с помощью инструмента mysqladmin, который позволяет запускать команды администрирования. Например, следующая команда предписывает подключиться к MariaDB как пользователь root, используя сокет Unix, и вывести номер версии:




sudo mysqladmin version




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




mysqladmin  Ver 9.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.3.25-MariaDB-0ubuntu0.20.04.1
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 36 min 21 sec

Threads: 7  Questions: 478  Slow queries: 0  Opens: 177  Flush tables: 1  Open tables: 31  Queries per second avg: 0.219




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




mysqladmin -u superadmin -p version




После этого вас попросят ввести пароль новоиспеченного пользователя superadmin. Резултат вывода будет аналогичен предыдущему:




mysqladmin  Ver 9.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.3.25-MariaDB-0ubuntu0.20.04.1
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 36 min 21 sec

Threads: 7  Questions: 478  Slow queries: 0  Opens: 177  Flush tables: 1  Open tables: 31  Queries per second avg: 0.219




Это означает, что MariaDB запущена и работает и что ваш пользователь сможет успешно пройти аутентификацию.



2021-01-16T18:08:01
Настройка web сервера