<h1>WEB basic. Web Application Firewall.</h1>
###Обновить операционную систему
Обновим **Ubuntu** операционную систему, чтобы убедиться, что все существующие пакеты обновлены:
```
sudo apt update && sudo apt upgrade -y
```
## **Установите последнюю версию Nginx на Ubuntu 20.04**
Во-первых, рекомендуется удалить все существующие установки Nginx и установить последнюю версию с помощью пользовательского **PPA**, поддерживаемого **Ондржеем Сури**, который также поставляется с дополнительными динамическими модулями, такими как модуль Brotli.
### Добавить последнюю версию Nginx PPA
Теперь, когда вы удалили свой старый сервис Nginx, рекомендуется установить один из двух PPA, перечисленных ниже.
В руководстве всегда рекомендуется устанавливать основную ветку в соответствии с рекомендацией Nginx.
Установите один из следующих PPA с помощью следующей команды:
***Install latest Nginx (MAINLINE):***
```
sudo add-apt-repository ppa:ondrej/nginx-mainline -y && sudo apt update
```


Теперь, когда вы установили **PPA** и обновили список репозиториев, установите Nginx, выполнив следующие действия:
```
sudo apt install nginx-core nginx-common nginx nginx-full
```

Обратите внимание, что вам может быть предложено сохранить или заменить существующий файл конфигурации ***/etc/nginx/nginx.conf*** во время установки. Рекомендуется сохранить текущий файл конфигурации, нажав **(n)**.
###Добавить исходный код Nginx в репозиторий
По умолчанию исходный код не устанавливается при установке PPA. Вам нужно будет вручную включить это, чтобы загрузить исходный код Nginx для компиляции Modsecurity позже в этом руководстве.
Сначала откройте файл конфигурации в ***/etc/apt/sources.list.d*** с помощью nano, как показано ниже:
```
sudo nano /etc/apt/sources.list.d/ondrej-ubuntu-nginx-mainline-*.list
```

Теперь найдите строку, которая начинается с **# deb-src** и **раскомментируйте** **(#)** строку.
```
# deb-src http://ppa.launchpad.net/ondrej/nginx-mainline/ubuntu/ focal main
```
*Пример того, как это должно выглядеть:*

Теперь сохраните файл **(CTRL+O)** и выйдите **(CTRL+X)**. Теперь обновите список репозиториев с помощью следующей команды:
```
sudo apt update
```

## **Скачать исходный код Nginx**
Вам потребуется загрузить исходный код Nginx, чтобы скомпилировать **динамический модуль ModSecurity**. Для этого вам потребуется скачать исходный пакет и сохранить его в каталоге ***/etc/local/src/nginx***.
### Создание и настройка каталогов
Создайте местоположение следующим образом:
```
sudo mkdir /usr/local/src/nginx && cd /usr/local/src/nginx
```

Необязательно — при необходимости назначьте разрешение для каталога, как показано ниже:
```
sudo chown username:username /usr/local/src/ -R
```

### Установить зависимости и выполнить загрузку
Затем загрузите исходный пакет со следующим:
```
sudo apt install dpkg-dev -y && sudo apt source nginx
```

Обратите внимание, вы увидите следующее сообщение об ошибке, как показано ниже:
```
dpkg-source: info: extracting nginx in nginx-1.21.1
dpkg-source: info: unpacking nginx_1.21.1.orig.tar.gz
dpkg-source: info: unpacking nginx_1.21.1-1+ubuntu20.04.1+deb.sury.org+1.debian.tar.xz
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: applying 0001-Make-sure-signature-stays-the-same-in-all-nginx-buil.patch
dpkg-source: info: applying 0002-define_gnu_source-on-other-glibc-based-platforms.patch
W: Download is performed unsandboxed as root as file 'nginx_1.21.1.orig.tar.gz' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
```
Это можно смело игнорировать.
### Проверить исходную версию
Затем перечислите файлы каталогов с помощью команды **ls** следующим образом:
```
ls
```

Вы должны увидеть следующий вывод в вашем **/usr/src/local/nginx** каталоге:
```
jjames@ubuntu:/usr/local/src/nginx$ ls
nginx-1.21.1
nginx_1.21.1-1+ubuntu20.04.1+deb.sury.org+1.debian.tar.xz
nginx_1.21.1-1+ubuntu20.04.1+deb.sury.org+1.dsc
nginx_1.21.1.orig.tar.gz
nginx_1.21.1.orig.tar.gz.asc
```
Затем подтвердите, что исходный пакет совпадает с версией Nginx, установленной в вашей операционной системе Ubuntu. Для этого используйте следующую команду **nginx -v** следующим образом:
```
nginx -v
```

Вы должны получить ту же выходную версию, что и источник, следующим образом:
```
jjames@ubuntu:/usr/local/src/nginx$ nginx -v
nginx version: nginx/1.21.1
```
РЕПОЗИТОРИЙ БЫЛ ОБНОВЛЕН ПОЭТОМУ ВЕРСИЯ 1.23.1
## **Установите libmodsecurity3 для ModSecurity**
Пакет **libmodsecurity3** – это фактическая часть WAF, выполняющая **HTTP-фильтрацию** для ваших веб-приложений. В Ubuntu 20.04 вы можете установить это из репозитория Ubuntu 20.04 по умолчанию. Однако это не рекомендуется, как и в большинстве LTS-версий, и часто отстает. Вместо этого вы будете компилировать из гораздо более современного источника следующим образом.
### Клонировать репозиторий ModSecurity с Github
Первый шаг — это клон с Github, и если у вас не установлен git, вам нужно будет выполнить следующую команду:
```
sudo apt install git -y
```

Обратите внимание, что при этом устанавливается версия репозитория Ubuntu 20.04 по умолчанию. Если вам нужна последняя актуальная версия с помощью PPA от команды репозитория GIT, ознакомьтесь с нашим руководством по установке и обновлению последней версии **[Git on Ubuntu 20.04](https://www.linuxcapable.com/how-to-install-and-update-latest-git-on-ubuntu-20-04/)**.
Затем клонируйте GIT-репозиторий libmodsecurity3 следующим образом:
```
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/
```

После клонирования вам потребуется **CD** в каталог:
```
cd /usr/local/src/ModSecurity/ | ls
```

### Установите зависимости libmodsecurity3
Для компиляции вам потребуется установить следующие зависимости следующим образом:
```
sudo apt install gcc make build-essential autoconf automake libtool libcurl4-openssl-dev liblua5.3-dev libfuzzy-dev ssdeep gettext pkg-config libpcre3 libpcre3-dev libxml2 libxml2-dev libcurl4 libgeoip-dev libyajl-dev doxygen -y
```

Теперь, чтобы закончить, установите следующие подмодули GIT следующим образом:
```
git submodule init
```

Затем обновите подмодули:
```
git submodule update
```

### Создание среды ModSecurity
Следующим шагом теперь является создание среды. Используйте следующую команду:
```
./build.sh
```

Затем запустите команду конфигурации:
```
./configure
```

Обратите внимание, вы, возможно, увидите следующую ошибку
```
fatal: No names found, cannot describe anything.
```
Вы можете смело проигнорировать это и перейти к следующему шагу.
### Компиляция исходного кода ModSecurity
Теперь, когда вы создали и настроили среду для libmodsecurity3, пришло время скомпилировать ее с помощью команды **make**.
```
make
```

Удобным приемом является указание **-j <количество процессоров>** , так как это может значительно увеличить скорость компиляции, если у вас мощный сервер. Например, сервер LinuxCapable имеет 6 ЦП, и я могу использовать все 6 или, по крайней мере, использовать от 4 до 5 для увеличения скорости.
```
make -j 6
```

После компиляции исходного кода запустите команду установки в своем терминале:
```
sudo make install
```

Обратите внимание, что установка выполняется в **/usr/local/modsecurity/,** , на которую вы будете ссылаться позже в руководстве.
## **Установить коннектор ModSecurity-nginx**
Коннектор **ModSecurity-nginx** – это точка соединения между **nginx** и **libmodsecurity.** Это компонент, который взаимодействует между Nginx и ModSecurity **(libmodsecurity3)**.
### Клонировать репозиторий ModSecurity-nginx с Github
Как и в предыдущем шаге по клонированию репозитория libmodsecurity3, вам потребуется снова клонировать репозиторий коннектора с помощью следующей команды:
```
sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/
```

### Установите зависимости ModSecurity-nginx
Затем переместите каталог CD в исходный каталог Nginx следующим образом:
```
cd /usr/local/src/nginx/nginx-1.23.1
```

Обратите внимание: замените версию руководства на текущую версию Nginx в вашей системе.
Теперь запустите команду в терминале Ubuntu, чтобы установить необходимые зависимости:
```
sudo apt build-dep nginx && sudo apt install uuid-dev -y
```

Далее вы скомпилируете модуль **ModSecurity-nginx Connector** только с флагом **–with-compat** следующим образом:
```
sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx
```

Затем, находясь в исходном каталоге Nginx, используйте следующую команду, чтобы переместить только что созданный динамический модуль, который был сохранен в папке ***objs/ngx_http_modsecurity_module.so***, и скопировать его в папку ***/usr/share. /nginx/modules*** каталог.
```
sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/
```

Вы можете хранить динамический модуль в любом месте, если вы указываете полный путь при загрузке.
## **Загрузить и настроить коннектор ModSecurity-nginx с помощью Nginx**
Теперь, когда вы скомпилировали динамический модуль и разместили его соответствующим образом, вам нужно отредактировать файл конфигурации ***/etc/nginx/nginx.conf*** , чтобы заставить ModSecurity работать с вашим веб-сервером Nginx.
### Включить ModSecurity в nginx.conf
Во-первых, вам нужно указать **load_module** и путь к вашему модулю безопасности.
Откройте **nginx.conf** в любом текстовом редакторе. Для урока будет использоваться nano:
```
sudo nano /etc/nginx/nginx.conf
```
Затем добавьте следующую строку в файл вверху:
```
load_module modules/ngx_http_modsecurity_module.so;
```

Если вы разместили модуль в другом месте, обязательно укажите полный путь.
Теперь добавьте следующий код в раздел **HTTP {}** следующим образом:
```
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsec-config.conf;
```

Если вы разместили модуль в другом месте, обязательно укажите полный путь.
Сохраните файл **nginx.conf** **(CTRL+O),** затем выйдите **(CTRL+X)**.
### Создание и настройка каталога и файлов для ModSecurity
Вам нужно будет создать каталог для хранения файлов конфигурации и будущих правил, OWASP CRS для руководства.
Используйте следующую команду, чтобы создать каталог ***/etc/nginx/modsec*** следующим образом:
```
sudo mkdir /etc/nginx/modsec/
```

Теперь вам нужно скопировать образец файла конфигурации ModSecurity обратно из нашего клонированного каталога GIT:
```
sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
```

Используя ваш любимый текстовый редактор в Ubuntu, откройте файл modsecurity.conf следующим образом:
```
sudo nano /etc/nginx/modsec/modsecurity.conf
```
По умолчанию в конфигурации ModSecurity механизм правил указан как **(DetectionOnly)**, который, другими словами, запускает ModSecurity и обнаруживает все вредоносные действия, но не блокирует и не блокирует и не регистрирует все отмеченные им HTTP-транзакции. Это следует использовать только в том случае, если у вас много ложных срабатываний или вы увеличили настройки уровня безопасности до экстремального уровня и проверяете, не возникают ли какие-либо ложные срабатывания.
Чтобы изменить это поведение на **(включено)**, найдите следующее в **строке 7**:
```
SecRuleEngine DetectionOnly
```
Измените строку на эту, чтобы включить ModSecurity:
```
SecRuleEngine On
```

Теперь вам нужно найти следующее, расположенное в **строке 224**:
```
# Log everything we know about a transaction.
SecAuditLogParts ABIJDEFHZ
```
Это неправильно, и это нужно изменить. Измените строку на следующее:
```
SecAuditLogParts ABCEFHJKZ
```

Теперь сохраните файл **modsecurity.conf** с помощью **(CTRL+O)** и выйдите **(CTRL+X)**.
Следующая часть — создать следующий файл **modsec-config.conf**. Здесь вы добавите файл **modsecurity.conf** вместе с другими правилами, например **OWASP CRS**, а если вы используете WordPress, – набором правил **WPRS CRS**.
Используйте следующую команду, чтобы создать файл и открыть его:
```
sudo nano /etc/nginx/modsec/modsec-config.conf
```
Оказавшись внутри файла, добавьте следующую строку:
```
Include /etc/nginx/modsec/modsecurity.conf
```

Сохраните файл **modsec-config.conf** с помощью **(CTRL+O)** и **(CTRL+X)** для выхода.
Наконец, скопируйте файл ModSecurity **unicode.mapping** с помощью **CP** команды следующим образом:
```
sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/
```

Теперь, прежде чем двигаться дальше, вы должны протестировать службу Nginx с помощью следующей команды терминала:
```
sudo nginx -t
```

Если вы все настроили правильно, вы должны получить следующий вывод:
```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```
Чтобы изменения вступили в силу, перезапустите службу Nginx с помощью команды systemctl:
```
sudo systemctl restart nginx
```
## **Установите основной набор правил OWASP для ModSecurity**
ModSecurity сам по себе не защищает ваш веб-сервер, и вам нужны правила. Одним из самых известных, уважаемых и хорошо известных правил является набор правил OWASP CRS. Эти правила наиболее широко используются среди веб-серверов и других WAF, и большинство других подобных систем основывают большинство своих правил на этой CRS. Установка этого набора правил автоматически предоставит вам отличный источник защиты от большинства новых угроз в Интернете, обнаруживая злоумышленников и блокируя их.
Используя **команду wget**, загрузите **архив OWASP CRS 3.3.2** следующим образом:
```
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.2.zip
```

**Для тех, кто хочет жить на грани, вы можете скачать ночную сборку. Используйте nightly только в том случае, если вы готовы продолжать перекомпилировать и часто проверять CoreRuleSet Github на наличие обновлений и быть более уверенным в выяснении проблем. Технически ночная служба может быть более безопасной, но потенциально может создавать проблемы.**
**Для начинающих пользователей используйте стабильную версию и не используйте версию ниже.**
```
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/nightly.zip
```

Установите **Распакуйте пакет** , если он не установлен на вашем сервере:
```
sudo dnf install unzip -y
```

Теперь **разархивируйте** архив **master.zip** следующим образом:
```
sudo unzip v3.3.2.zip -d /etc/nginx/modsec
```

Как и прежде, как и пример конфигурации ***modsecurity.conf***, **OWASP CRS** поставляется с образцом файла конфигурации, который необходимо переименовать. Лучше всего использовать **CP** **команду** и сохранить резервную копию на случай, если вам понадобится перезапустить снова.
```
sudo cp /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf
```

Чтобы включить правила, снова откройте **/etc/nginx/modsec/modsec-config.conf** в любом текстовом редакторе:
```
sudo nano /etc/nginx/modsec/modsec-config.conf
```
Снова внутри файла добавьте следующие две дополнительные строки:
```
Include /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf
Include /etc/nginx/modsec/coreruleset-3.3.2/rules/*.conf
```

Сохраните файл **(CTRL+O)** и выйдите **(CTRL+T)**.
Как и прежде, вам необходимо протестировать любые новые дополнения к вашему сервису Nginx, прежде чем запускать его:
```
sudo nginx -t
```

После запуска пробного теста вы должны получить следующий вывод, который означает, что все работает правильно:
```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```
Перезапустите службу Nginx, чтобы изменения вступили в силу следующим образом:
```
sudo systemctl restart nginx
```
<h2>Configure proxy</h2>
ipaddress WAF

ipaddress web-serv

Для настройки прокси изменяем файл /etc/nginx/sites-enabled/default

Проверим подключени к сайту duice-shop через ip WAF

<h2>Проведем 3 атаки из OWASP</h2>
Sql-Injection
Пытаемся зайти на УЗ админа с помощью логина admin' OR 1=1--

как результат видим срабатывание правил WAF

Broken Access Control
Пытаемся получить доступ к админской панели введя в адресную строку /administration

как результат видим срабатывание правил WAF

Sensitive Data Exposure
Пытаемся получить доступ к ftp серверу введя в адресную строку /ftp

как результат видим срабатывание правил WAF

Мой город Самара