[Уроци] Nginx (Anti DDoS) и други уроци

PHP, MySQL, Javascript, XHTML и др.
Потребителски аватар

Автор на темата
V.A.L.V.E WEB DEV
Потребител
Потребител
Мнения: 310
Регистриран: 18 дек 2016, 22:48
Се отблагодари: 46 пъти
Получена благодарност: 24 пъти
Години: 25

[Уроци] Nginx (Anti DDoS) и други уроци

Мнение от V.A.L.V.E WEB DEV » 05 окт 2019, 18:58

Урок #5
Инсталация на Ngxtop
Изображение
За какво служи Ngxtop
Мониторинг на вашият Nginx сървър за грешки:
 ! Съобщение от: V.A.L.V.E
2xx 3xx 4xx 5xx

На кратко както е описано от автора: Показатели в реално време за nginx сървър (и други)
Начин на инсталация
- Отваряме терминала и пишем команда
apt-get install python-pip

- Отваряме терминала и пишем команда
pip install ngxtop

Инструкции и полезни команди:
Напишете в терминала (конзолата) команда
ngxtop и ще видите нещо подобно на
Изображение
Повече информация за кодовете 2xx 3xx 4xx 5xx ще намерите тук:
List of HTTP status

- Как да прегледаме кой IP адреси, колко посещения са направили

Отваряме терминала и пишем командата ngxtop top remote_addr

Там ще видите картинка подобна на тази:
Изображение
Източник на една от снимките: TechMint.com
ТОМИСЛАВ ВАСИЛЕВ - ТЕХНИЧЕСКА ПОДДРЪЖКА


тел.: 0700 45 800 | моб.тел.:+359 885 588 822


офис: гр.София, кв. Изток - бул."Д-р Г.М. Димитров" N.36


www.superhosting.bg | blog.superhosting.bg| help.superhosting.bg


SUPERHOSTING.BG - НОВО ПОКОЛЕНИЕ ХОСТИНГ

Потребителски аватар

Jaxxin
Потребител
Потребител
Мнения: 9
Регистриран: 16 яну 2019, 23:30
Местоположение: Варна
Получена благодарност: 3 пъти
Контакти:

[Уроци] Nginx (Anti DDoS) и други уроци

Мнение от Jaxxin » 05 окт 2019, 21:43

Урок #6
Настройка на TCP FAST OPEN (TFO)
Какво е TCP FAST OPEN (TFO)?
Изображение
Технология наречена на кратко TFO, при която се редуцира мрежовата латенция при комуникация през TCP, като се изпращат данни още при първоначалният SYN пакет. По този начин се избягва постоянното използване на three way handshake модела при TCP.

Начин на инсталация
- Отваряме терминала и пишем командата:
cat /proc/sys/net/ipv4/tcp_fastopen

Ако това върне стойност 0, то е деактивирано. Освен това, ако връща стойност 1, това означава, че TFO е активиран само при изходящи връзки (клиент), а стойността 2 показва, че е достъпна само при слушане на сокети (сървър). Ще искате обаче tcp_fastopen да бъде настроен на 3, което позволява и двете.
Сега ще направим промени по настройките да може TFO да работи при изходяща и входяща връзка
- Отваряме терминала и пишем командата:
echo "3" > /proc/sys/net/ipv4/tcp_fastopen

Това ще промени стойността tcp_fastopen, докато системата не се рестартира. Ако обаче искате да избегнете необходимостта да променяте стойността всеки път, когато системата се рестартира, можете да създадете файл tcp_fastopen.conf в директорията /etc/sysctl.d, както следва:

- Отваряме терминала и пишем командата:
echo "net.ipv4.tcp_fastopen=3" > /etc/sysctl.d/30-tcp_fastopen.conf
Вече имаме конфигурационен файл tcp_fastopen, който определя стойност 3, съхранявана в директорията sysctl.d. Можем да проверим съдържанието на този файл, като стартираме командата cat /etc/sysctl.d/30-tcp_fastopen.conf

Когато напишем командата, терминала трябва да ни върне отговор:
net.ipv4.tcp_fastopen=3

Що се отнася до поддръжката на Nginx TFO, повечето пакети Nginx не включват това по подразбиране. Въпреки това, той може да бъде зададен във default.conf Nginx файла.

- Отваряме терминала и пишем командата:
sudo nano /etc/nginx/sites-available/default
Намираме следните редове:

server {
listen 80 default_server;
listen [::]:80 default_server;


Променяме ги на:
server { listen 80 fastopen=256 default_server; listen [::]:80 default_server;
 ! Съобщение от: Jaxxin
За да влязат настройките в действие, рестарайте VPS машината.

Потребителски аватар

Автор на темата
V.A.L.V.E WEB DEV
Потребител
Потребител
Мнения: 310
Регистриран: 18 дек 2016, 22:48
Се отблагодари: 46 пъти
Получена благодарност: 24 пъти
Години: 25

[Уроци] Nginx (Anti DDoS) и други уроци

Мнение от V.A.L.V.E WEB DEV » 05 окт 2019, 22:37

Урок #7
Web & Mysql Backup
Изображение
Във този урок ще ти разкажа читателю, как да си направиш автоматична бекъп система на твоят уеб сайт и всички датабази, абсолютно безплатно (не както в повечето сайтове пише (no credit card required а ти удират кожата :D )

Скриптовете който правят цялата процедура авоматична, са разделени на два, първият ще е за бекъп на датабазите, а вторият на уеб сайта ти.
Mysql Databases backup
- Отваряме терминала (конзолата) и пишем следните команди една след друга
cd /home/ sudo mkdir scripts cd /home/scripts/ touch mysql-backup.sh

1. Влязохме във директория "/home"
2. Създадохме папка "scripts"
3. Влязохме във папката която създадохме.
4. Създадохме файл с име mysql-backup.sh

- Отваряме терминала (конзолата) и пишем следната команда:
sudo nano mysql-backup.sh
Тази команда ще отвори файла със текстови редактор.

Копирайте кода написан по-долу, отворете терминала и кликнете десен бутон на мишката върху терминала, така ще поставите кода.

#!/bin/bash #---------------------------------------- # OPTIONS #---------------------------------------- USER='root' # MySQL User PASSWORD='webdev' # MySQL Password DAYS_TO_KEEP=0 # 0 to keep forever GZIP=1 # 1 = Compress BACKUP_PATH='/home/backups/mysql' #---------------------------------------- # Create the backup folder if [ ! -d $BACKUP_PATH ]; then mkdir -p $BACKUP_PATH fi # Get list of database names databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "|" | grep -v Database` for db in $databases; do if [ $db == 'information_schema' ] || [ $db == 'performance_schema' ] || [ $db == 'mysql' ] || [ $db == 'sys' ]; then echo "Skipping database: $db" continue fi date=$(date -I) if [ "$GZIP" -eq 0 ] ; then echo "Backing up database: $db without compression" mysqldump -u $USER -p$PASSWORD --databases $db > $BACKUP_PATH/$date-$db.sql else echo "Backing up database: $db with compression" mysqldump -u $USER -p$PASSWORD --databases $db | gzip -c > $BACKUP_PATH/$date-$db.gz fi done # Delete old backups if [ "$DAYS_TO_KEEP" -gt 0 ] ; then echo "Deleting backups older than $DAYS_TO_KEEP days" find $BACKUP_PATH/* -mtime +$DAYS_TO_KEEP -exec rm {} \; fi

На реда PASSWORD='1234' сменяме 1234 със паролата на нашият mysql сървър.
друго не пипаме ако не разбираме, защото лошо.

Затваряме текстовия редактор със следната комбинация на клавиатурата ctrl+O и след това ctrl+x

Сега даваме права на файла като напишем в терминала командата sudo chmod +x mysql-backup.sh

Отваряме терминала и пишем следните команди една след друга
cd /home/ mkdir backups cd /home/backups/ mkdir mysql chmod -R 777 /home/backups/mysql/

1. Влязохме във директория '/home'
2. Създадохме папка backups
3. Влязохме във директория '/home/backups'
4. Създадохме папка mysql
5. Дадохме пълни права за четене и редактиране на папка mysql

Отваряме терминала (конзолата) и пишем следната команда sudo crontab -e
Ще видим меню, където избираме 1 и натискаме ентар.
Най-долу във файла пишем следните 2 реда:
@daily sh /home/scripts/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1 0 0 * * * * /home/backups/mysql-backup.sh
Натискаме клавиатурната комбинация ctrl+o и ctrl+x да запазим файла.

ИНФО


cron файла прави автоматични задачи според зададеното от нас време, направихме да се запазва .log файл във папка /var/log/ със име mysql-backup.log ежедневно лог файла ще се обновява.

Създадохме автоматична задача всяка нощ във 00:00ч. ВПС-а да прави бекъп на цялата датабаза, като изключва default датабазите (те не ви трябват на вас)

На прост език, всяка нощ във 00:00 според часовата зона на VPS-а ще ви се създава бекъп на датабазата във папка /home/backups/mysql

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Web site backup
- Отваряме терминала и пишем следните команди една по една:
cd /home/scripts/ touch www-backup.sh sudo nano www-backup.sh

1. Отидохме във директорията "/home/scripts/"
2. Създадохме файл с име www-backup.sh
3. Отворихме файла за да вкараме скрипта.

След като вече сте вътре във файла, копирайте кода по-долу, отворете терминала и с десен бутон на мишката го поставете във терминала

#!/bin/bash #---------------------------------------- # OPTIONS #---------------------------------------- DAYS_TO_KEEP=0 # 0 to keep forever WWW_PATH='/var/www/' BACKUP_PATH='/home/backups/www' #---------------------------------------- # Create the backup folder if [ ! -d $BACKUP_PATH ]; then mkdir -p $BACKUP_PATH fi # change into the web root directory cd "$WWW_PATH" if [ "$(pwd)" != "$WWW_PATH" ] ; then echo "Failed to change directory to root of web path" exit fi for website in * ; do if [[ -d $website && ! -L "$website" ]]; then echo "Found website folder: $website" date=$(date -I) tar -cvpzf $BACKUP_PATH/$date-$website.tar.gz $website fi done # Delete old backups if [ "$DAYS_TO_KEEP" -gt 0 ] ; then echo "Deleting backups older than $DAYS_TO_KEEP days" find $BACKUP_PATH/* -mtime +$DAYS_TO_KEEP -exec rm {} \; fi

Излизаме от редактора със клавиатурната комбинация ctrl+o ентар и след това ctrl+x

Пишем следната команда във терминала:
sudo chmod +x www-backup.sh
Тази команда дава права на файла да може скрипта записан вътре да се изпълнява успешно.

Във терминала пишем нова команда:
cd /home/backups/ mkdir www chmod -R 777 /home/backups/www/

1. Влязохме във директория '/home/backups'
2. Създадохме папка www
3. Зададохме пълни права за чете и редактиране на папка www

Отваряме терминала и пишем следната команда:
sudo crontab -e
Избираме опция 1 (като натиснем бутона 1 на клавиатурата) и натискаме ентар.

Най-долу след всички редове пишем следната команда
@daily sh /home/scripts/www-backup.sh >> /var/log/www-backup.log 2>&1
0 0 * * * * /home/backups/mysql-backup.sh
Натискаме клавиатурната комбинация ctrl+o и натискаме ентар след това ctrl+x
ИнФО
Всяка нощ във 00:00ч. (според часовника на VPS-а) ще се прави бекъп на папката /var/www/
Бекъпа ще се намира във папка /home/backups/www
.log файла ще се обновява всеки ден ще го намерите във директория '/var/log' с име www-backup.log

Ако имате въпроси за настройки и т.н, може да пишете във темата. :nicecode:
ТОМИСЛАВ ВАСИЛЕВ - ТЕХНИЧЕСКА ПОДДРЪЖКА


тел.: 0700 45 800 | моб.тел.:+359 885 588 822


офис: гр.София, кв. Изток - бул."Д-р Г.М. Димитров" N.36


www.superhosting.bg | blog.superhosting.bg| help.superhosting.bg


SUPERHOSTING.BG - НОВО ПОКОЛЕНИЕ ХОСТИНГ

Потребителски аватар

hackera457 СОТА
Модератор
Модератор
Мнения: 649
Регистриран: 01 ное 2016, 09:46
Местоположение: София
Получена благодарност: 81 пъти
Години: 25
Контакти:

[Уроци] Nginx (Anti DDoS) и други уроци

Мнение от hackera457 СОТА » 06 окт 2019, 21:18

Евалата пич, че правиш подобни уроци. Съветът ми към всички е да не ползвате споделен хостинг, а да изградите сървъра от нулата сами - така удоволствието от това, което сте създали ще ви прави щастливи и ще научите много полезни неща, които в бъдеще ще ползвате
Извън темата
Предпочитам CentOS през Ubuntu - по-гъвкава и достатъчно лесна за администрация
Моите плъгини

Код: Избери всички

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Потребителски аватар

Автор на темата
V.A.L.V.E WEB DEV
Потребител
Потребител
Мнения: 310
Регистриран: 18 дек 2016, 22:48
Се отблагодари: 46 пъти
Получена благодарност: 24 пъти
Години: 25

[Уроци] Nginx (Anti DDoS) и други уроци

Мнение от V.A.L.V.E WEB DEV » 08 окт 2019, 00:32

Урок #8
Изображение
Anti DDoS system - Layer 7

Какво представлява атаката?:think:
Изображение


Кратко обяснение относно картинката по-горе

1.Attacker ( Лицето което ще ви атакува, някой ги наричат "хакери" "хахори" и т.н )
2.ISP (Интернет доставчика на хостинг компанията)
3. Защитата на хостинг компанията.
4.Трафика от бот мрежата на хакера --> Уеб сървъра.
5. Нашата защита от урока
6. Уеб сървъра (Nginx)


Изисквания: Nginx и Fail2ban


1. Отваряме терминала и пишем командата: cd /etc/nginx натискаме ентар. Пишем отново във терминала команда nano nginx.conf и натискаме ентар.
- Файла nginx.conf ще ви се отвори със текстови редактор. Вътре във nginx.conf търсим реда http {
- Под реда http { слагаме тези 2 кода
# BULLTEN limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=7r/s; # BULLTEN limit_conn_status 403; limit_req_status 403;

Ще изглежда подобно на тази картинка:
Изображение

2. Отваряме терминала и пишем командата sudo nano /etc/nginx/sites-enabled/default
- Търсим където пише --> root /var/www/html; под него ред добавяме -->
# BULLTEN limit_conn conn_limit_per_ip 10; limit_req zone=req_limit_per_ip burst=5 nodelay; client_body_timeout 5s; client_header_timeout 5s;

3. Отваряме терминала и пишем команда --> systemctl restart nginx ако nginx ви е бил пуснат, така ще го рестартираме и настройките ще влязат в сила.Ако nginx ви е бил спрян, сменете restart nginx със start nginx

4. Отваряме терминала и пишем командата --> install fail2ban -y

5. Отваряме терминала и пишем командата --> cd /etc/fail2ban

6. Отваряме терминала и пишем командата --> touch jail.local

7. Отваряме терминала и пишем командата --> nano jail.local
- Ще намерите накрая на темата прикачен файл, отворете го с Notepad++ копирайте целият код и го поставете във jail.local
- След като сте копирали и поставили кода, натиснете клавиатурната комбинация ctrl+o и след това ctrl+x

8. Сега ще изтеглим 2 много важни файла! (Преди dl-package ДОБАВЕТЕ http:// )
- Отваряме терминала и пишем командата --> wget --output-document="/etc/fail2ban/filter.d/nginx-conn-limit.conf" dl-package.bullten.in/cwp/files/nginx_limit/nginx-conn-limit.txt
- Отваряме терминала и пишем командата --> wget --output-document="/etc/fail2ban/filter.d/nginx-req-limit.conf" dl-package.bullten.in/cwp/files/nginx_limit/nginx-req-limit.txt

9. Стартираме fail2ban като отворим терминала и напишем командата --> service fail2ban start

10. Отваряме терминала и пишем командата --> fail2ban-client status nginx-req-limit
- Трябва да ни излезе нещо подобно
Изображение

11. Отваряме терминала и пишем командата --> fail2ban-client status nginx-conn-limit
- Трябва да ни излезе нещо подобно
Изображение

PP: Можете да смените пътя на един от 2-та лога (можете да си направите файл примерно: error2.log във /var/log/nginx/)
и да смените path= ( пътя на един от 2-та кода) --> nginx-req-limit или nginx-conn-limit

Това е по ваше желание, без да ги промените, всичко пак ще си работи на 100%
Прикачени файлове
jail.txt
Отвори ме с Notepad++ !!!! и ме сложи във jail.lock
(24.37 KиБ) Свален 2 пъти
jail.txt
Отвори ме с Notepad++ !!!! и ме сложи във jail.lock
(24.37 KиБ) Свален 2 пъти
ТОМИСЛАВ ВАСИЛЕВ - ТЕХНИЧЕСКА ПОДДРЪЖКА


тел.: 0700 45 800 | моб.тел.:+359 885 588 822


офис: гр.София, кв. Изток - бул."Д-р Г.М. Димитров" N.36


www.superhosting.bg | blog.superhosting.bg| help.superhosting.bg


SUPERHOSTING.BG - НОВО ПОКОЛЕНИЕ ХОСТИНГ

Потребителски аватар

Jaxxin
Потребител
Потребител
Мнения: 9
Регистриран: 16 яну 2019, 23:30
Местоположение: Варна
Получена благодарност: 3 пъти
Контакти:

[Уроци] Nginx (Anti DDoS) и други уроци

Мнение от Jaxxin » 08 окт 2019, 10:44

Урок #9
ClamAv - Антивирусна
Изображение
За какво служи ClamAV - Scanner
Антивирусна система най често използвана за сканиране на уеб сайтове или електронна поща.

Инструкции:

1. Отваряме терминала и пишем командите 1 по 1 !
apt-get update
apt-get install clamav clamav-daemon -y

2.Отваряме терминала и пишем следната команда --> systemctl start clamav-freshclam
- Със командата clamscan --help можете да видите всички команди.

Най-често използваната команда е : clamscan -r --remove /var/www/html/ (Като на мястото на /var/www/html/ изписваме директорията до нашият уеб сайт)

- Командата която изписваме горе, изпълнява следните функции:

- Сканира файловете и директориите
- Изтрива инфектиран файл
 ! Съобщение от: Jaxxin
Сканирането може да продължи няколко минути, моля изчакайте!
След като сканирането свърши ще ни излезе подобна информация във терминала
Изображение

Отговори

Върни се в “Уеб Програмиране”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост