Подключаем репозиторий Nginx
создаем файл
/etc/yum.repos.d/nginx.repo
Вписываем
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Запускаем
# dnf install nginx
# systemctl start nginx
# systemctl enable nginx
Настройка fail2ban для Nginx
vim /etc/fail2ban/jail.local
#Мониторинг логов
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
#Кто ищет уязвимость в скрипте
[nginx-noscript]
enabled = true
port = http,https
filter = nginx-noscript
logpath = /var/log/nginx/access.log
maxretry = 6
#Бан ботов
[nginx-badbots]
enabled = true
port = http,https
filter = nginx-badbots
logpath = /var/log/nginx/access.log
maxretry = 2
#Бан кто запрашивает домашний каталог
[nginx-nohome]
enabled = true
port = http,https
filter = nginx-nohome
logpath = /var/log/nginx/access.log
maxretry = 2
#Бан кто пытается использовать как прокси
[nginx-noproxy]
enabled = true
port = http,https
filter = nginx-noproxy
logpath = /var/log/nginx/access.log
maxretry = 2
Фильтры Fail2ban
cd /etc/fail2ban/filter.d
#Шаблон неудачной аунтификации в логе
vim nginx-http-auth.conf
[Definition]
failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: <HOST>, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$
^ \[error\] \d+#\d+: \*\d+ no user/password was provided for basic authentication, client: <HOST>, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$
ignoreregex =
#Копируем шаблон апча для ngix
cp apache-badbots.conf nginx-badbots.conf
vim nginx-noscript.conf
[Definition]
failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\.scgi)
ignoreregex =
vim nginx-nohome.conf
[Definition]
failregex = ^<HOST> -.*GET .*/~.*
ignoreregex =
vim nginx-noproxy.conf
[Definition]
failregex = ^<HOST> -.*GET http.*
ignoreregex =
vi /etc/fail2ban/jail.d/nginx-ddos.conf
[nginx-ddos]
enabled = true
port = http,https
filter = nginx-limit-req
action = iptables-multiport[name=nginxddos, port="http,https", protocol=tcp]
logpath = /var/log/nginx/error.log
service fail2ban restart
Ставим php-fpm
# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf install php-fpm
# systemctl start php-fpm
# systemctl enable php-fpm
Проверяем
# ll /run/php-fpm/www.sock
srw-rw----+ 1 root root 0 Oct 4 13:14 /run/php-fpm/www.sock
Ставим базу
# dnf install mariadb-server mariadb
# systemctl start mariadb
# systemctl enable mariadb
Запускаем скрипт настройки
# /usr/bin/mysql_secure_installation
Оптимизируем БД для zabbix
# mcedit /etc/my.cnf.d/mariadb-server.cnf
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8
[mysqld]
character_set_server=utf8
collation-server=utf8_bin
init_connect="SET NAMES utf8 collate utf8_bin"
port = 3306
socket = /var/lib/mysql/mysql.sock
innodb_file_per_table=1
innodb_buffer_pool_size = 768M # внимание на параметр! установить примерно в 2 раза меньше объема оперативной памяти сервера
innodb_buffer_pool_instances=1 # увеличивать на 1 каждый GB innodb_buffer_pool_size
innodb_flush_log_at_trx_commit = 0
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb-strict-mode = OFF
Перезапустим
# systemctl restart mariadb
# systemctl status mariadb.service
Установка сервера Zabbix 4.0
Подключаем репозиторий
# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/8/x86_64/zabbix-release-4.0-2.el8.noarch.rpm
Устанавливаем
# yum install zabbix-server-mysql zabbix-web-mysql
Заводим юзера БД
# mysql -uroot -p
Enter password:
> create database zabbix character set utf8 collate utf8_bin;
> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabpassword';
exit
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Настраиваем zabbix
# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabpassword
ListenIP=0.0.0.0
Timeout=10
# systemctl restart mysqld
# systemctl status mysqld
Запускаем zabbix
# systemctl start zabbix-server
# systemctl enable zabbix-server
Правим конфиг
vim /etc/php-fpm.d/zabbix.conf
user = nginx
group = nginx
php_value[date.timezone] = Europe/Kiev
# systemctl restart php-fpm
Ставим Letsencrypt
sudo yum -y install git bc
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
cd /opt/letsencrypt ./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Правим конфиг nginx
cd /etc/nginx/conf.d/
vim default.conf
server {
listen 80;
server_name localhost;
# certbot validation
location ^~ /.well-known/ {
alias /usr/share/nginx/html/.well-known/;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name your_domain_name;
index index.php;
ssl_certificate /etc/letsencrypt/live/your_domain_name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain_name/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
# позволяем серверу прикреплять OCSP-ответы, тем самым уменьшая время загрузки страниц у пользователей
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
access_log /var/log/nginx/ssl_zabbix.access.log;
error_log /var/log/nginx/ssl_zabbix.error.log;
set $webroot '/usr/share/zabbix';
root /usr/share/zabbix;
large_client_header_buffers 8 8k;
client_max_body_size 10M;
location = /favicon.ico {
log_not_found off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# certbot validation
location ^~ /.well-known/ {
autoindex on;
alias /usr/share/nginx/html/.well-known/;
}
# deny running scripts inside writable directories
location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
return 403;
error_page 403 /403_error.html;
}
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# caching of files
location ~* \.(ico|pdf|flv)$ {
expires 1y;
}
location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$ {
expires 14d;
}
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/zabbix.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffers 8 256k;
fastcgi_buffer_size 128k;
fastcgi_intercept_errors on;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
Проверяем
# 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
Даем права nginx
# chown -R nginx:nginx /var/lib/php/session
# chown -R nginx:nginx /etc/zabbix/web
Обновление сертификатов
sudo crontab -e
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
35 2 * * 1 /usr/bin/systemctl reload nginx
Заходим на web
http://you_ip/
тыкаем некст
учетка по умолчанию
name: Admin
pass: zabbix
входм и меняем
Advinistration - User - Admin
и меняем пароль
Если нужна руссификация
localectl
localectl list-locales
localectl set-keymap ruwin_alt-UTF-8
localectl set-locale LANG=ru_RU.UTF-8
dnf install glibc-langpack-ru
reboot
Настройка Zabbix Server
Создание пользователя
Administration -> Users и нажимаем Create User
Настройка email оповещений
Администрирование -> Способы оповещений и нажимаем на Email
Добавляем адрес для получения оповещений
Администрирование -> Пользователи
Выбираем своего пользователя. Идем во вкладку Оповещения и жмем Добавить. Добавляйте свой ящик и нажимайте Обновить
Активация уведомлений по событиям
Настройка -> Действия и жмем на Деактивировано, чтобы стало Активировано
Zabbix агент
На агенте добавляем репу
rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/8/x86_64/zabbix-release-4.0-2.el8.noarch.rpm
Ставим
sudo yum install zabbix-agent
Генерируем PSK
sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"
Копируем ключь
cat /etc/zabbix/zabbix_agentd.psk
Правим конфиг агента
vim /etc/zabbix/zabbix_agentd.conf
Server=your_zabbix_server_ip_address
LogFileSize=1
ServerActive=your_zabbix_server_ip_address
Hostname=host_zabbix_agent
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=PSK 001
TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
Создаем пользователя mysql
GRANT PROCESS ON *.* TO 'zabbix'@'localhost' identified BY 'some_password';
FLUSH PRIVILEGES;
Ищем стоку в
cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf | grep UserParameter
HOME=
Создаем там фаил .my.cnf с параметрами
[client]
user=zabbix
password=some_password
sudo systemctl start zabbix-agent
sudo systemctl enable zabbix-agent
sudo systemctl status zabbix-agent
На сервере
Configuration → Hosts - Create host
В полях Host name и IP ADDRESS укажите имя и IP-адрес клиента. Затем выберите группу хоста; вы можете выбрать одну из существующих групп или создать свою. Один хост может входить сразу в несколько групп. Группа Linux Servers выбрана по умолчанию и подходит в большинстве случаев. Добавив группу, откройте вкладку Templates.
Введите в поле поиска Template OS Linux и нажмите Add, чтобы добавить этот шаблон.
Откройте вкладку Encryption. Выберите PSK в Connections to host и Connections from host. В PSK identity укажите имя ключа, установленное в параметре TLSPSKIdentity на агенте Zabbix (в данном случае PSK 001).
В поле PSK укажите ключ, который хранится в /etc/zabbix/zabbix_agentd.psk на агенте.
Нажмите Add, чтобы добавить хост.
Новый хост появится в списке. Через несколько секунд можно открыть Monitoring → Latest data и просмотреть данные агента.
Чтобы убедиться, что всё работает должным образом, остановите клиентский сервер. В такой ситуации сервер Zabbix должен сообщить о проблеме.
|