<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 ``` ![](https://i.imgur.com/V1I9JCQ.jpg) ![](https://i.imgur.com/3zvRHjz.jpg) Теперь, когда вы установили **PPA** и обновили список репозиториев, установите Nginx, выполнив следующие действия: ``` sudo apt install nginx-core nginx-common nginx nginx-full ``` ![](https://i.imgur.com/Dml9dMP.jpg) Обратите внимание, что вам может быть предложено сохранить или заменить существующий файл конфигурации ***/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 ``` ![](https://i.imgur.com/UOpUZs2.jpg) Теперь найдите строку, которая начинается с **# deb-src** и **раскомментируйте** **(#)** строку. ``` # deb-src http://ppa.launchpad.net/ondrej/nginx-mainline/ubuntu/ focal main ``` *Пример того, как это должно выглядеть:* ![https://www.linuxcapable.com/wp-content/uploads/2021/08/dbr-source-uncomment-nginx-modsecurity-install.png](https://www.linuxcapable.com/wp-content/uploads/2021/08/dbr-source-uncomment-nginx-modsecurity-install.png) Теперь сохраните файл **(CTRL+O)** и выйдите **(CTRL+X)**. Теперь обновите список репозиториев с помощью следующей команды: ``` sudo apt update ``` ![](https://i.imgur.com/yC0k2cZ.jpg) ## **Скачать исходный код Nginx** Вам потребуется загрузить исходный код Nginx, чтобы скомпилировать **динамический модуль ModSecurity**. Для этого вам потребуется скачать исходный пакет и сохранить его в каталоге ***/etc/local/src/nginx***. ### Создание и настройка каталогов Создайте местоположение следующим образом: ``` sudo mkdir /usr/local/src/nginx && cd /usr/local/src/nginx ``` ![](https://i.imgur.com/IvdB3Qt.jpg) Необязательно — при необходимости назначьте разрешение для каталога, как показано ниже: ``` sudo chown username:username /usr/local/src/ -R ``` ![](https://i.imgur.com/LWyz10F.jpg) ### Установить зависимости и выполнить загрузку Затем загрузите исходный пакет со следующим: ``` sudo apt install dpkg-dev -y && sudo apt source nginx ``` ![](https://i.imgur.com/nLgnx2l.jpg) Обратите внимание, вы увидите следующее сообщение об ошибке, как показано ниже: ``` 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 ``` ![](https://i.imgur.com/YXGp8Xb.jpg) Вы должны увидеть следующий вывод в вашем **/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 ``` ![](https://i.imgur.com/cGmzY6f.jpg) Вы должны получить ту же выходную версию, что и источник, следующим образом: ``` 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 ``` ![](https://i.imgur.com/5cGoV8G.jpg) Обратите внимание, что при этом устанавливается версия репозитория 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/ ``` ![](https://i.imgur.com/E3XyE3c.jpg) После клонирования вам потребуется **CD** в каталог: ``` cd /usr/local/src/ModSecurity/ | ls ``` ![](https://i.imgur.com/mkCTLIF.jpg) ### Установите зависимости 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 ``` ![](https://i.imgur.com/RIOZdNA.jpg) Теперь, чтобы закончить, установите следующие подмодули GIT следующим образом: ``` git submodule init ``` ![](https://i.imgur.com/lHFWfHl.jpg) Затем обновите подмодули: ``` git submodule update ``` ![](https://i.imgur.com/gFJnfaL.jpg) ### Создание среды ModSecurity Следующим шагом теперь является создание среды. Используйте следующую команду: ``` ./build.sh ``` ![](https://i.imgur.com/t5EOPxV.png) Затем запустите команду конфигурации: ``` ./configure ``` ![](https://i.imgur.com/WwyDmEh.jpg) Обратите внимание, вы, возможно, увидите следующую ошибку ``` fatal: No names found, cannot describe anything. ``` Вы можете смело проигнорировать это и перейти к следующему шагу. ### Компиляция исходного кода ModSecurity Теперь, когда вы создали и настроили среду для libmodsecurity3, пришло время скомпилировать ее с помощью команды **make**. ``` make ``` ![](https://i.imgur.com/8px9U8F.jpg) Удобным приемом является указание **-j <количество процессоров>** , так как это может значительно увеличить скорость компиляции, если у вас мощный сервер. Например, сервер LinuxCapable имеет 6 ЦП, и я могу использовать все 6 или, по крайней мере, использовать от 4 до 5 для увеличения скорости. ``` make -j 6 ``` ![](https://i.imgur.com/76oDYQ1.jpg) После компиляции исходного кода запустите команду установки в своем терминале: ``` sudo make install ``` ![](https://i.imgur.com/oiDmQ94.jpg) Обратите внимание, что установка выполняется в **/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/ ``` ![](https://i.imgur.com/fzXT26W.jpg) ### Установите зависимости ModSecurity-nginx Затем переместите каталог CD в исходный каталог Nginx следующим образом: ``` cd /usr/local/src/nginx/nginx-1.23.1 ``` ![](https://i.imgur.com/046cyYE.jpg) Обратите внимание: замените версию руководства на текущую версию Nginx в вашей системе. Теперь запустите команду в терминале Ubuntu, чтобы установить необходимые зависимости: ``` sudo apt build-dep nginx && sudo apt install uuid-dev -y ``` ![](https://i.imgur.com/GLcw7Wc.jpg) Далее вы скомпилируете модуль **ModSecurity-nginx Connector** только с флагом **–with-compat** следующим образом: ``` sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx ``` ![](https://i.imgur.com/JdR1u07.jpg) Затем, находясь в исходном каталоге Nginx, используйте следующую команду, чтобы переместить только что созданный динамический модуль, который был сохранен в папке ***objs/ngx_http_modsecurity_module.so***, и скопировать его в папку ***/usr/share. /nginx/modules*** каталог. ``` sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/ ``` ![](https://i.imgur.com/SvWXK4O.jpg) Вы можете хранить динамический модуль в любом месте, если вы указываете полный путь при загрузке. ## **Загрузить и настроить коннектор 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; ``` ![](https://i.imgur.com/u94W5ue.jpg) Если вы разместили модуль в другом месте, обязательно укажите полный путь. Теперь добавьте следующий код в раздел **HTTP {}** следующим образом: ``` modsecurity on; modsecurity_rules_file /etc/nginx/modsec/modsec-config.conf; ``` ![](https://i.imgur.com/k5j7S3i.jpg) Если вы разместили модуль в другом месте, обязательно укажите полный путь. Сохраните файл **nginx.conf** **(CTRL+O),** затем выйдите **(CTRL+X)**. ### Создание и настройка каталога и файлов для ModSecurity Вам нужно будет создать каталог для хранения файлов конфигурации и будущих правил, OWASP CRS для руководства. Используйте следующую команду, чтобы создать каталог ***/etc/nginx/modsec*** следующим образом: ``` sudo mkdir /etc/nginx/modsec/ ``` ![](https://i.imgur.com/oI79QcV.jpg) Теперь вам нужно скопировать образец файла конфигурации ModSecurity обратно из нашего клонированного каталога GIT: ``` sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf ``` ![](https://i.imgur.com/uBgNr4T.jpg) Используя ваш любимый текстовый редактор в Ubuntu, откройте файл modsecurity.conf следующим образом: ``` sudo nano /etc/nginx/modsec/modsecurity.conf ``` По умолчанию в конфигурации ModSecurity механизм правил указан как **(DetectionOnly)**, который, другими словами, запускает ModSecurity и обнаруживает все вредоносные действия, но не блокирует и не блокирует и не регистрирует все отмеченные им HTTP-транзакции. Это следует использовать только в том случае, если у вас много ложных срабатываний или вы увеличили настройки уровня безопасности до экстремального уровня и проверяете, не возникают ли какие-либо ложные срабатывания. Чтобы изменить это поведение на **(включено)**, найдите следующее в **строке 7**: ``` SecRuleEngine DetectionOnly ``` Измените строку на эту, чтобы включить ModSecurity: ``` SecRuleEngine On ``` ![](https://i.imgur.com/DBFNkcU.jpg) Теперь вам нужно найти следующее, расположенное в **строке 224**: ``` # Log everything we know about a transaction. SecAuditLogParts ABIJDEFHZ ``` Это неправильно, и это нужно изменить. Измените строку на следующее: ``` SecAuditLogParts ABCEFHJKZ ``` ![](https://i.imgur.com/4yOtgc4.jpg) Теперь сохраните файл **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 ``` ![](https://i.imgur.com/mWmpf6r.jpg) Сохраните файл **modsec-config.conf** с помощью **(CTRL+O)** и **(CTRL+X)** для выхода. Наконец, скопируйте файл ModSecurity **unicode.mapping** с помощью **CP** команды следующим образом: ``` sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/ ``` ![](https://i.imgur.com/mfPcgDS.jpg) Теперь, прежде чем двигаться дальше, вы должны протестировать службу Nginx с помощью следующей команды терминала: ``` sudo nginx -t ``` ![](https://i.imgur.com/cLaBWGp.jpg) Если вы все настроили правильно, вы должны получить следующий вывод: ``` 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 ``` ![](https://i.imgur.com/RiZgqkl.jpg) **Для тех, кто хочет жить на грани, вы можете скачать ночную сборку. Используйте nightly только в том случае, если вы готовы продолжать перекомпилировать и часто проверять CoreRuleSet Github на наличие обновлений и быть более уверенным в выяснении проблем. Технически ночная служба может быть более безопасной, но потенциально может создавать проблемы.** **Для начинающих пользователей используйте стабильную версию и не используйте версию ниже.** ``` wget https://github.com/coreruleset/coreruleset/archive/refs/tags/nightly.zip ``` ![](https://i.imgur.com/QT3MVYh.jpg) Установите **Распакуйте пакет** , если он не установлен на вашем сервере: ``` sudo dnf install unzip -y ``` ![](https://i.imgur.com/ba9QaiG.jpg) Теперь **разархивируйте** архив **master.zip** следующим образом: ``` sudo unzip v3.3.2.zip -d /etc/nginx/modsec ``` ![](https://i.imgur.com/sIpepnd.jpg) Как и прежде, как и пример конфигурации ***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 ``` ![](https://i.imgur.com/5W3JhXS.jpg) Чтобы включить правила, снова откройте **/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 ``` ![](https://i.imgur.com/KfVKqh9.jpg) Сохраните файл **(CTRL+O)** и выйдите **(CTRL+T)**. Как и прежде, вам необходимо протестировать любые новые дополнения к вашему сервису Nginx, прежде чем запускать его: ``` sudo nginx -t ``` ![](https://i.imgur.com/T4vy6Yu.jpg) После запуска пробного теста вы должны получить следующий вывод, который означает, что все работает правильно: ``` 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 ![](https://i.imgur.com/qMglNm1.jpg) ipaddress web-serv ![](https://i.imgur.com/yhaF6pt.png) Для настройки прокси изменяем файл /etc/nginx/sites-enabled/default ![](https://i.imgur.com/Nk00lAO.jpg) Проверим подключени к сайту duice-shop через ip WAF ![](https://i.imgur.com/hceL9YQ.png) <h2>Проведем 3 атаки из OWASP</h2> Sql-Injection Пытаемся зайти на УЗ админа с помощью логина admin' OR 1=1-- ![](https://i.imgur.com/LvzBiIV.png) как результат видим срабатывание правил WAF ![](https://i.imgur.com/iZ5AHvq.png) Broken Access Control Пытаемся получить доступ к админской панели введя в адресную строку /administration ![](https://i.imgur.com/q1iM2xl.png) как результат видим срабатывание правил WAF ![](https://i.imgur.com/wePBq9Z.jpg) Sensitive Data Exposure Пытаемся получить доступ к ftp серверу введя в адресную строку /ftp ![](https://i.imgur.com/HXlLQaS.png) как результат видим срабатывание правил WAF ![](https://i.imgur.com/RVCMxUs.jpg) Мой город Самара