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

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

Автор на темата
V.A.L.V.E WEB DEV
Потребител
Потребител
Мнения: 338
Регистриран: 18 дек 2016, 22:48
Се отблагодари: 53 пъти
Получена благодарност: 41 пъти
Години: 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

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

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

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

Мнение от Jaxxin OXD » 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
Потребител
Потребител
Мнения: 338
Регистриран: 18 дек 2016, 22:48
Се отблагодари: 53 пъти
Получена благодарност: 41 пъти
Години: 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:

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

hackera457 СОТА
Модератор
Модератор
Мнения: 723
Регистриран: 01 ное 2016, 09:46
Местоположение: София
Се отблагодари: 1 път
Получена благодарност: 100 пъти
Години: 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
Потребител
Потребител
Мнения: 338
Регистриран: 18 дек 2016, 22:48
Се отблагодари: 53 пъти
Получена благодарност: 41 пъти
Години: 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иБ) Свален 14 пъти
jail.txt
Отвори ме с Notepad++ !!!! и ме сложи във jail.lock
(24.37 KиБ) Свален 14 пъти

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

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

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

Мнение от Jaxxin OXD » 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
Сканирането може да продължи няколко минути, моля изчакайте!
След като сканирането свърши ще ни излезе подобна информация във терминала
Изображение

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

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

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

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

Урок #10
Anti DDoS защита 1.5Tb в секунда на домейн и хостинг - Цена: 0.00лв! :huh:


Ставаш сутрин, правиш си кафе :coffee: и бум на компютъра. Отваряш си браузъра, въвеждаш името на домейна си и хоп:
Изображение :worried:
Хмм.. 2-ри опит, щрак F5 и отново:
Изображение

Какво да правя?
Изображение

Следваш ли стъпките описани по-долу ще си лягаш спокоен, гарантирам ти го от опит. :o
(Линковете предоставени по-долу не са с цел реклама ! Нямам нищо общо със сайта)

1. Отваряте сайта ddos-guard.net
2. Правите си регистрация.
3. Потвърждавате я чрез линка който ще получите във имейла си.
4. Логвате се и кликвате горе в ляво на "Add Service" -> https://i.imgur.com/7lcnnZ2.png
5. Избирате план - Free (Безплатен) -> https://i.imgur.com/VoZgeKg.png
6. На следваща страница ще Ви изисква:
Protected domain * - Името на Вашият домейн.
Target server IP address * - IP адреса на сървъра където се хоства Вашият сайт.
(Как да намерите IP адреса на хостинга)
Отваряте :
digwebinterface.com
Пишете името на домейна Ви и кликвате Dig.
След като приключи проверката ще видите IP адреса на хостинга Ви.

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

Предлагам ви да смените DNS сървърите с тези на DDoS - Guard, причината е че могат да ви DDoS-нат сайта по DNS-ите или MX записите и т.н.

- Какви са DNS сървърите на DDoS-Guard?
ns1.ddos-guard.net
ns2.ddos-guard.net
ns3.ddos-guard.net
ns4.ddos-guard.net
ns5.ddos-guard.net
ns6.ddos-guard.net

 ! Съобщение от: V.A.L.V.E
Не препоръчвам да смените А-записа на домейна Ви с този на DDoS - Guard а, директно DNS сървърите!


DDoS - Guard има панел от който можете да добавите MX,TXT,CNAME и други видове записи. Панела за смяна на записи от DDoS - Guard работи само и единствено ако сте променили DNS-ите на домейна си с техните.

Ако вече сте сменили DNS-ите с тези на DDoS - Guard
Влезете във Вашият профил на DDoS - Guard и проверете дали имате зададен А запис към IP адреса на Вашият хостинг за да работи всичко коректно.

Препоръчвам: TTL (Time To Live) да го направите от 1800 на 300 секунди. Не е задължително, само препоръчвам. ;))

 ! Съобщение от: V.A.L.V.E
Внимание!
По - подразбиране има настройка за SSL сертификат зададен от DDoS - Guard.
Желателно е ако нямате инсталиран SSL за домейна Ви даже и безплатният AutoSSL на cPanel да промените настройките, като препоръчителни са тези който виждаме по-долу:
Изображение

Тези настройки ще ги намерите във панела на DDoS - Guard.

Нека си припомним за атаката срещу GitHub.
https://github.blog/2018-03-01-ddos-incident-report/
Атака от 1.35Tbps - като всеки 1 пакет към тях летеше със 400GBPS.
Статията която е писана от тях ще Ви даде представа, как те са били атакувани и ще имате едно на ум на кое да обърнете внимание.

Урока е писан лично от мен!
Моля, всеки който желае да го копира, нека постави името ми като автор под поста. :o

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

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

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

Мнение от Jaxxin OXD » 19 ное 2019, 20:12

Урок #11
[Блокиране на атаки чрез iptables]

Има различни начини за изграждане на ваши собствени анти-DDoS правила за iptables. В този изчерпателен урок ще обсъдим най-ефективните методи за защита от DDoS.

Това ръководство ще ви научи как да:

Изберете най-добрата таблица и верига за iptables, за да спрете DDoS атаките
Оправете настройките на ядрото си, за да смекчите ефектите на DDoS атаките
Използвайте iptables, за да блокирате повечето базирани на TCP DDoS атаки
Използвайте iptables SYNPROXY, за да блокирате байпасване на по-горните правила в Iptables

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

Въпреки това, не е невъзможно да се филтрира повечето лош трафик при скорост на линия с помощта на iptables!

Ще покрием само защитата от атаки, базирани на TCP. Повечето UDP-базирани атаки са усилени рефлекторни атаки, които ще изчерпат мрежовата интерфейсна карта на всеки споделен сървър.

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

Ако те успеят да достигнат до вашия сървър, няма какво да направите срещу тези мулти-Gbit / s атаки, освен да се преместите в DDoS защитена мрежа. (Както съм описал в урок #10 )

Какво е IPtables?
netfilter iptables (скоро ще бъде заменен с nftables ) е полезна програма за команден ред на потребителско пространство за конфигуриране на правила за филтриране на пакети от ядро, разработени от netfilter.

Това е помощната програма за управление на защитната стена по подразбиране в Linux системите - всеки, който работи с Linux системи, трябва да е запознат с нея или поне да е чувал за нея.

iptables могат да се използват за филтриране на определени пакети, блокиране на изходни или дестинационни портове и IP адреси, пренасочване на пакети чрез NAT и много други неща.

Най-често се използва за блокиране на дестинационни портове и изходни IP адреси.

Защо вашите IPtables Anti-DDoS правила не са правилни

За да разберем защо вашите текущи правила за iptables за предотвратяване на DDoS атаки не помагат, първо трябва да разберем как работи iptables.

iptables е инструмент за команден ред, използван за настройка и контрол на таблиците на правилата за филтриране на IP пакети. Има различни таблици за различни цели.

IPable таблици
Филтър: Таблицата с филтри е таблицата по подразбиране и най-често използваната таблица, към която отиват правилата, ако не използвате опцията -t ( –table ).

NAT: Тази таблица се използва за превод на мрежови адреси (NAT). Ако пакет създаде нова връзка, nat таблицата се проверява за правила.

Mangle: Таблицата с mangle се използва за промяна или маркиране на пакети и информация за техните заглавки.

Raw: Целта на тази таблица е главно да изключи определени пакети от проследяване на връзката, като използва целта NOTRACK.

Както можете да видите, има четири различни таблици в средна Linux система, която няма заредени нестандартни модули на ядрото. Всяка от тези таблици поддържа различен набор от iptables вериги .

IPtables
ПРЕДУПРЕЖДЕНИЕ:raw, nat, mangle
Отнася се за пакети, които влизат в мрежовата интерфейсна карта (NIC)

INPUT: filter, mangle
Отнася се за пакети, които се маршрутизират през сървъра

ИЗХОД: filter, mangle
Отнася се за пакети, които сървърът изпраща (локално генерирани)

OUTPUT: raw, filter, nat, mangle
Отнася се за пакети, които напускат сървъра

В зависимост от това какъв тип пакети искате да блокирате или модифицирате, избирате определена таблица за iptables и вериги, която избраната таблица поддържа.

Разбира се, все още ни липсва обяснение на целите на iptables (ACCEPT, DROP, REJECT и т.н.), но предполагаме, че ако четете тази тема, вече знаете как да се справите с iptables.

Ще обясним защо вашите правила за iptables не помагат, за да спрете DDoS, а не да ви научим как да използвате iptables. Да се ??върнем на това.

Ако искате да блокирате DDoS атака с iptables, изпълнението на правилата на iptables е изключително важно. Повечето типове DDoS базирани на TCP атаки използват висока скорост на пакети, което означава, че чистият брой пакети в секунда е това, което кара сървъра да пада.

Ето защо искате да сте сигурни, че можете да обработвате и блокирате колкото се може повече пакети в секунда.

Ще откриете, че повечето, ако не всички ръководства за това как да блокират DDoS атаки с помощта на iptables, използват филтърната таблица и веригата INPUT за анти-DDoS правила.

Проблемът с този подход е, че веригата INPUT се обработва само след веригите PREROUTING и FORWARD и следователно се прилага само ако пакетът не съвпада с която и да е от тези две вериги.

Това причинява забавяне на филтрирането на пакета, който консумира ресурси. В заключение, за да направим правилата си възможно най-ефективни, трябва да преместим нашите анти-DDoS правила колкото е възможно по-нагоре по веригите.

Първата верига, която може да се приложи към пакет, е веригата PREROUTING, така че в идеалния случай вече ще искаме да филтрираме лошите пакети в тази верига.

Въпреки това, филтър таблица не поддържа PREROUTING верига. За да заобиколим този проблем, можем просто да използваме таблицата с mangle вместо филтърната таблица за нашите правила против DDoS iptables.

Той поддържа повечето, ако не всички правила, които филтърната таблица поддържа, като същевременно поддържа всички iptables вериги.

Така че искате да знаете защо вашите правила за защита от iptables DDoS не помагат? Това е така, защото използвате филтърната таблица и веригата INPUT, за да блокирате лошите пакети!

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

Най-доброто решение за драстично повишаване на производителността на вашите правила за iptables и следователно количеството (TCP) DDoS трафик за атака, което те могат да филтрират, е да използвате таблицата на mangle и веригата PREROUTING!

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

Имайте предвид, че това ръководство се фокусира върху CentOS 7 като операционна система по избор. CentOS 7 включва скорошна версия на iptables и поддръжка на новата цел на SYNPROXY.

Няма да покриваме всяка една настройка на ядрото, която трябва да коригирате, за да смекчим по-добре DDoS с iptables.

Вместо това предоставяме набор от настройки на ядрото CentOS 7, които бихме използвали. Просто поставете по-долу във вашия /etc/sysctl.conf файл и приложете настройките с sysctl -p .

Настройки на анти-DDoS ядрото (sysctl.conf)
kernel.printk = 4 4 1 7 kernel.panic = 10 kernel.sysrq = 0 kernel.shmmax = 4294967296 kernel.shmall = 4194304 kernel.core_uses_pid = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 vm.swappiness = 20 vm.dirty_ratio = 80 vm.dirty_background_ratio = 5 fs.file-max = 2097152 net.core.netdev_max_backlog = 262144 net.core.rmem_default = 31457280 net.core.rmem_max = 67108864 net.core.wmem_default = 31457280 net.core.wmem_max = 67108864 net.core.somaxconn = 65535 net.core.optmem_max = 25165824 net.ipv4.neigh.default.gc_thresh1 = 4096 net.ipv4.neigh.default.gc_thresh2 = 8192 net.ipv4.neigh.default.gc_thresh3 = 16384 net.ipv4.neigh.default.gc_interval = 5 net.ipv4.neigh.default.gc_stale_time = 120 net.netfilter.nf_conntrack_max = 10000000 net.netfilter.nf_conntrack_tcp_loose = 0 net.netfilter.nf_conntrack_tcp_timeout_established = 1800 net.netfilter.nf_conntrack_tcp_timeout_close = 10 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20 net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20 net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20 net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.ip_no_pmtu_disc = 1 net.ipv4.route.flush = 1 net.ipv4.route.max_size = 8048576 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.tcp_congestion_control = htcp net.ipv4.tcp_mem = 65536 131072 262144 net.ipv4.udp_mem = 65536 131072 262144 net.ipv4.tcp_rmem = 4096 87380 33554432 net.ipv4.udp_rmem_min = 16384 net.ipv4.tcp_wmem = 4096 87380 33554432 net.ipv4.udp_wmem_min = 16384 net.ipv4.tcp_max_tw_buckets = 1440000 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_max_orphans = 400000 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rfc1337 = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_sack = 1 net.ipv4.tcp_fack = 1 net.ipv4.tcp_ecn = 2 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 60 net.ipv4.tcp_keepalive_probes = 10 net.ipv4.tcp_no_metrics_save = 1 net.ipv4.ip_forward = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.all.rp_filter = 1

Тези настройки на sysctl.conf помагат за увеличаване на ефективността на вашия сървър под DDoS, както и ефективността на правилата на iptables, които ще предоставим в това ръководство.

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

Действителните IPtables Anti-DDoS правила
Имайки предвид, че сега знаете, че трябва да използвате таблицата на mangle и веригата PREROUTING, както и оптимизирани настройки на ядрото, за да смекчите ефектите на DDoS атаките, сега ще преминем към няколко примерни правила за смекчаване на повечето TCP DDoS атаки.

DDoS атаките са сложни.

Има много различни видове DDoS и е почти невъзможно да се поддържат базирани на подписа правила срещу всички тях.

Но за щастие има нещо, наречено проследяване на връзката (модул на ядрото nf_conntrack), което може да ни помогне да смекчим почти всяка TCP-базирана DDoS атака, която не използва SYN пакети, които изглеждат легитимни.

Това включва всички видове ACK и SYN-ACK DDoS атаки, както и DDoS атаки, които използват фалшиви TCP флагове.

Ще започнем само с пет прости iptables правила, които вече ще отпаднат много TCP-базирани DDoS атаки.

Блокиране на невалидни пакети
iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP

Това правило блокира всички пакети, които не са SYN пакет и не принадлежат към установена TCP връзка.

Блокирайте нови пакети, които не са SYN
iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP

Това блокира всички нови пакети (не принадлежат към установена връзка) и не използват флаг SYN. Това правило е подобно на "Блокиране на невалидни пакети", но открихме, че той улавя някои пакети, които другият не.

Блокиране на нечести стойности на MSS
iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP
Горното правило iptables блокира нови пакети (само SYN пакетите могат да бъдат нови пакети съгласно двете предишни правила), които използват TCP MSS стойност, която не е често срещана. Това помага да се блокират SYN атаките.

Блокиране на пакети с флагове на Bogus TCP
iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

Горният набор от правила блокира пакети, които използват фалшиви TCP флагове, т.е. TCP флагове, които законните пакети не биха използвали.


Блокиране на пакети от частни подмрежи (Spoofing)
iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP

Тези правила блокират подправени пакети, произхождащи от частни (локални) подмрежи. В интерфейса на вашата обществена мрежа обикновено не искате да получавате пакети от IP-адреси на частен източник.

Тези правила предполагат, че вашият loopback интерфейс използва 127.0.0.0/8 IP в пространството.

Тези пет набора правила сами вече блокират много базирани на TCP DDoS атаки при много високи скорости на пакети.

С горепосочените настройки и правила на ядрото ще можете да филтрирате ACK и SYN-ACK атаки с линейна скорост.

Допълнителни правила
iptables -t mangle -A PREROUTING -p icmp -j DROP

Това отпада всички ICMP пакети. ICMP се използва само за ping на хост, за да разбере дали все още е жив. Тъй като обикновено това не е необходимо и представлява само друга уязвимост, която атакуващите могат да експлоатират, ние блокираме всички пакети ICMP, за да смекчим Ping of Death (ping poplava), потоп на ICMP и потоп от фрагментиране на ICMP.

iptables -A INPUT -p tcp -m connlimit --connlimit-above 80 -j REJECT --reject-with tcp-reset

Това правило за iptables помага срещу атаките за връзка. Той отхвърля връзки от хостове, които имат повече от 80 установени връзки. Ако се сблъскате с някакви проблеми, трябва да повдигнете лимита, тъй като това може да доведе до проблеми с посетителите, които установяват голям брой TCP връзки.

iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP

Ограничава новите TCP връзки, които клиентът може да установи в секунда. Това може да бъде полезно срещу атаки на връзки, но не толкова срещу SYN атаки, тъй като обикновено използват безкрайно количество от различни IP-адреси в бот мрежа.

iptables -t mangle -A PREROUTING -f -j DROP
Това правило блокира фрагментирани пакети. Обикновено нямате нужда от тях и блокирането на фрагменти ще смекчи потопа от фрагментиране на UDP. Но през повечето време атаките с фрагментация на UDP използват голямо количество честотна лента, което е вероятно да изтощи капацитета на вашата мрежова карта, което прави това правило незадължително и вероятно не е най-полезното.

iptables -A INPUT -p tcp --tcp-flags RST RST -m limit --limit 2/s --limit-burst 2 -j ACCEPT iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP

Това ограничава входящите TCP RST пакети, за да смекчи TCP RST наводненията. Ефективността на това правило е съмнителна.
--------------------------------------------------------------------------------
Смекчаване на атаките на SYN с SYNPROXY
SYNPROXY е нова цел на iptables, която е добавена във Linux ядро ??версия 3.12 и iptables 1.4.21. CentOS 7 подкрепи функцията и тя е достъпна в ядрото си по подразбиране 3.10.

Целта на SYNPROXY е да провери дали хостът, изпратил SYN пакета, действително установява пълна TCP връзка или просто не прави нищо, след като изпрати SYN пакета.

Ако не направи нищо, изхвърля пакета с минимално въздействие върху производителността.

Докато правилата на iptables, които предоставихме по-горе, вече блокират повечето атаки, базирани на TCP, типът атака, който все още може да се промъкне през тях, ако е достатъчно сложен, е SYN потоп.

Важно е да се отбележи, че изпълнението на правилата винаги ще бъде по-добро, ако намерим определен шаблон или подпис за блокиране, като дължина на пакета ( -m дължина ), TOS ( -m tos ), TTL ( -m ttl ) или низове и шестнадесетични стойности ( -m string и -m u32 за по-напредналите потребители).

Но в някои редки случаи това не е възможно или поне не е лесно за постигане. Така че в тези случаи можете да се възползвате от SYNPROXY.

Ето правила за iptables SYNPROXY, които помагат за смекчаване на наводненията на SYN, които заобикалят другите ни правила:
iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460 iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Тези правила важат за всички портове. Ако искате да използвате SYNPROXY само на определени TCP портове, които са активни (препоръчително - също така трябва да блокирате всички TCP портове, които не се използват, използвайки таблицата на mangle и веригата PREROUTING), можете просто да добавите –dport 80 за всяко от правилата ако искате да използвате SYNPROXY само на порт 80.

За да проверите дали SYNPROXY работи, можете да гледате -n1 cat / proc / net / stat / synproxy . Ако стойностите се променят, когато установите нова TCP връзка с порта, на който използвате SYNPROXY, той работи.

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

Ето още няколко правила за iptables, които са полезни за повишаване на общата сигурност на Linux сървър:
iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --set iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP iptables -N port-scanning iptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN iptables -A port-scanning -j DROP


Заключение
Този урок демонстрира някои от най-мощните и ефективни методи за спиране на DDoS атаки с помощта на iptables.

Успешно смекчихме DDoS атаките, които достигнаха максимум с няколко милиона пакета в секунда, използвайки тези правила за iptables.

Ако се използва правилно, iptables е изключително мощен инструмент, който може да блокира различни видове DDoS атаки със скорост 1 - 10GBPS
 ! Съобщение от: Jaxxin
Не подценявайте силата на iptables!
Превод: V.A.L.V.E & Jaxxin
Източник: Google
Урока е добавен по молба на hackera457

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

terrorsecurity.tech antiwar
VIP
VIP
Мнения: 124
Регистриран: 15 фев 2017, 21:53
Получена благодарност: 7 пъти

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

Мнение от terrorsecurity.tech antiwar » 21 ное 2019, 10:19

1. Само не мога да разбера защо даваш права 777 на всички файлове и директории с :
chmod -R 777 /usr/share/nginx/html/forum

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

По-редно е:
chown -R www-data:www-data /usr/share/nginx/html/forum/

2. Аз бих предпочел да използвам tcp сокети и го правя, вместо UNIX сокети, поради ред причини.
fastcgi_pass unix:/run/php/php7.0-fpm.sock;

===
fastcgi_pass 127.0.0.1:9000;
и, разбира се;
/etc/php/7.0/fpm/pool.d/www.conf
listen = 127.0.0.1:9000
/etc/init.d/php7.0-fpm restart

3. Това за SSL може да стане много по-лесно, като просто дефинираш SSL в същия vhost, а не да инклудваш още 1500 файла.
Ще ти дам пример с виртуалния хост, който си публикувал горе;
server {
listen 80 default_server;
listen [::]:80 default_server;

root /usr/share/nginx/html;
index index.php index.html index.htm index.nginx-debian.html;

server_name 127.0.0.1;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

location ~ /\.ht {
deny all;
}
}
Така би изглеждало много по-добре;
server {
listen 80;
listen [::]:80;
server_name твоядомейн.com www.твоядомейн.com;
root /usr/share/nginx/html;
index index.php;
rewrite ^ https://$server_name$request_uri? permanent;
}

server {
listen 443 ssl;
listen [::]:443 ssl;
root /usr/share/nginx/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name твоядомейн.com www.твоядомейн.com;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/ssl/yourssl.crt;
ssl_certificate_key /etc/ssl/yourkey.key;
ssl_dhparam /etc/ssl/param/dhparam.pem;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_read_timeout 240;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ /\. {
access_log off;
log_not_found off;
deny all;
}

location ~ /\.ht {
deny all;
}
}
Това добавя сертификатът и го дефинира за същият виртуален хостинг + автоматичен редирект.

И само да ти кажа последно - не винаги виртуалните машини имат привилегиите да редактират sysctl.conf файл.

Иначе браво за уроците. Трябва само да доизпипаш нещата повече.

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

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

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

Мнение от V.A.L.V.E WEB DEV » 21 ное 2019, 10:32

terrorsecurity.tech написа:
21 ное 2019, 10:19
1. Само не мога да разбера защо даваш права 777 на всички файлове и директории с :
chmod -R 777 /usr/share/nginx/html/forum

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

По-редно е:
chown -R www-data:www-data /usr/share/nginx/html/forum/

2. Аз бих предпочел да използвам tcp сокети и го правя, вместо UNIX сокети, поради ред причини.
fastcgi_pass unix:/run/php/php7.0-fpm.sock;

===
fastcgi_pass 127.0.0.1:9000;
и, разбира се;
/etc/php/7.0/fpm/pool.d/www.conf
listen = 127.0.0.1:9000
/etc/init.d/php7.0-fpm restart

3. Това за SSL може да стане много по-лесно, като просто дефинираш SSL в същия vhost, а не да инклудваш още 1500 файла.
Ще ти дам пример с виртуалния хост, който си публикувал горе;
server {
listen 80 default_server;
listen [::]:80 default_server;

root /usr/share/nginx/html;
index index.php index.html index.htm index.nginx-debian.html;

server_name 127.0.0.1;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

location ~ /\.ht {
deny all;
}
}
Така би изглеждало много по-добре;
server {
listen 80;
listen [::]:80;
server_name твоядомейн.com www.твоядомейн.com;
root /usr/share/nginx/html;
index index.php;
rewrite ^ https://$server_name$request_uri? permanent;
}

server {
listen 443 ssl;
listen [::]:443 ssl;
root /usr/share/nginx/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name твоядомейн.com www.твоядомейн.com;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/ssl/yourssl.crt;
ssl_certificate_key /etc/ssl/yourkey.key;
ssl_dhparam /etc/ssl/param/dhparam.pem;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_read_timeout 240;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ /\. {
access_log off;
log_not_found off;
deny all;
}

location ~ /\.ht {
deny all;
}
}
Това добавя сертификатът и го дефинира за същият виртуален хостинг + автоматичен редирект.

И само да ти кажа последно - не винаги виртуалните машини имат привилегиите да редактират sysctl.conf файл.

Иначе браво за уроците. Трябва само да доизпипаш нещата повече.


Здравейте,

Благодарим Ви от мое име и на колегата за съветите, ще се възползваме от тях, все още има неща които ги разучаваме и даваме отговори и уроци според нашите знания.

Забелязвах, че някой от нещата които Вие сте описали по-долу от една страна са коректни но за начинаещи мисля, че е по-добре описаните варианти по-горе от нас.

Имайте на предвид, че не всички са технически грамотни и започват сега да навлизат в средата на линукс администрацията.

Поздрави.

Отговори
  • Подобни теми
    Отговори
    Преглеждания
    Последно мнение

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

Кой е на линия

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