Cum se instalează ModSecurity pentru Nginx pe CentOS 7, Debian 8 și Ubuntu 16.04

ModSecurity este un modul firewall pentru aplicații web open source (WAF), care este excelent pentru protejarea Apache, Nginx și IIS împotriva diverselor atacuri cibernetice care vizează vulnerabilități potențiale în diverse aplicații web.

În acest articol, vom instala și configura ModSecurity pentru Nginx pe CentOS 7, Debian 8 și Ubuntu 16.04.

Cerințe preliminare

  • O instalare actualizată de CentOS 7, Debian 8 sau 64-biți Ubuntu 16.04.
  • Conectare ca root.

Pasul 1: Actualizați sistemul

Urmând acest ghid , actualizați Kernel-ul și pachetele serverului dvs. la cea mai recentă versiune disponibilă.

Pasul 2: Instalează dependențe

Înainte de a putea compila Nginx și ModSecurity cu succes, trebuie să instalați mai multe pachete software după cum urmează.

a) Pe CentOS 7:

yum groupinstall -y "Development Tools"
yum install -y httpd httpd-devel pcre pcre-devel libxml2 libxml2-devel curl curl-devel openssl openssl-devel
shutdown -r now

b) Pe Debian 8 sau Ubuntu 16.04:

apt-get install -y git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-dev libxml2-dev libcurl4-openssl-dev automake pkgconf

Pasul 3: Compile ModSecurity

Datorită mai multor instabilități raportate la ModSecurity pentru sucursala principală Nginx, deocamdată este recomandat să folosești cea mai recentă versiune a nginx_refactoringsucursalei ori de câte ori este posibil.

Descărcați secțiunea nginx_refactoringModSecurity pentru Nginx:

cd /usr/src
git clone -b nginx_refactoring https://github.com/SpiderLabs/ModSecurity.git

Compile ModSecurity:

a) Pe CentOS 7:

cd ModSecurity
sed -i '/AC_PROG_CC/a\AM_PROG_CC_C_O' configure.ac
sed -i '1 i\AUTOMAKE_OPTIONS = subdir-objects' Makefile.am
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make

Notă: cele două sedcomenzi de mai sus sunt utilizate pentru a preveni mesajele de avertizare atunci când utilizați versiuni mai noi de automatizare.

b) Pe Debian 8 sau Ubuntu 16.04:

cd ModSecurity
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make

Pasul 4: Compilați Nginx

Descărcați și anarchicați cea mai recentă versiune stabilă a Nginx, care este Nginx 1.10.3la momentul scrierii:

cd /usr/src
wget https://nginx.org/download/nginx-1.10.3.tar.gz
tar -zxvf nginx-1.10.3.tar.gz && rm -f nginx-1.10.3.tar.gz

a) Pe CentOS 7:

În primul rând, trebuie să creați un utilizator dedicat nginxși un grup dedicat nginxpentru Nginx:

groupadd -r nginx
useradd -r -g nginx -s /sbin/nologin -M nginx

Apoi compilați Nginx în timp ce activați modulele ModSecurity și SSL:

cd nginx-1.10.3/
./configure --user=nginx --group=nginx --add-module=/usr/src/ModSecurity/nginx/modsecurity --with-http_ssl_module
make
make install

Modificați utilizatorul implicit al Nginx:

sed -i "s/#user  nobody;/user nginx nginx;/" /usr/local/nginx/conf/nginx.conf

b) Pe Debian 8 sau Ubuntu 16.04:

În primul rând, ar trebui să utilizați utilizatorul existent www-datași grupul existent www-data.

Apoi compilați Nginx în timp ce activați modulele ModSecurity și SSL:

cd nginx-1.10.3/
./configure --user=www-data --group=www-data --add-module=/usr/src/ModSecurity/nginx/modsecurity --with-http_ssl_module
make
make install

Modificați utilizatorul implicit al Nginx:

sed -i "s/#user  nobody;/user www-data www-data;/" /usr/local/nginx/conf/nginx.conf

După instalarea cu succes a Nginx, fișierele aferente vor fi localizate la:

nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"

puteți testa instalarea cu:

/usr/local/nginx/sbin/nginx -t

Dacă nu merge nimic, rezultatul ar trebui să fie:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

Pentru confortul dvs., puteți configura un fișier unitate de sistem pentru Nginx:

cat <<EOF>> /lib/systemd/system/nginx.service
[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
KillStop=/usr/local/nginx/sbin/nginx -s stop

KillMode=process
Restart=on-failure
RestartSec=42s

PrivateTmp=true
LimitNOFILE=200000

[Install]
WantedBy=multi-user.target
EOF

Mergând înainte, puteți porni / opri / reporni Nginx după cum urmează:

systemctl start nginx.service
systemctl stop nginx.service
systemctl restart nginx.service

Pasul 4: Configurați ModSecurity și Nginx

4.1 Configurați Nginx:

vi /usr/local/nginx/conf/nginx.conf

Găsiți următorul segment din http {}segment:

location / {
    root   html;
    index  index.html index.htm;
}

Introduceți liniile de mai jos în location / {}segment:

ModSecurityEnabled on;
ModSecurityConfig modsec_includes.conf;
#proxy_pass http://localhost:8011;
#proxy_read_timeout 180s;

Rezultatul final ar trebui să fie:

location / {
    ModSecurityEnabled on;
    ModSecurityConfig modsec_includes.conf;
    #proxy_pass http://localhost:8011;
    #proxy_read_timeout 180s;
    root   html;
    index  index.html index.htm;
}

Salvează și închide:

:wq!

Notă: Configurația Nginx de mai sus este doar un exemplu de configurare pentru utilizarea Nginx ca server web, mai degrabă decât un proxy invers. Dacă utilizați Nginx ca proxy invers, îndepărtați #caracterul din ultimele două rânduri și modificați-le corespunzător.

4.2 Creați un fișier numit /usr/local/nginx/conf/modsec_includes.conf:

cat <<EOF>> /usr/local/nginx/conf/modsec_includes.conf
include modsecurity.conf
include owasp-modsecurity-crs/crs-setup.conf
include owasp-modsecurity-crs/rules/*.conf
EOF

Notă: Configurația de mai sus va aplica toate regulile de bază OWASP ModSecurity din owasp-modsecurity-crs/rules/director. Dacă doriți să aplicați numai reguli selective, ar trebui să eliminați include owasp-modsecurity-crs/rules/*.conflinia, apoi să specificați regulile exacte de care aveți nevoie după pasul 4.5.

4.3 Importați fișierele de configurare ModSecurity:

cp /usr/src/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/ModSecurity/unicode.mapping /usr/local/nginx/conf/

4.4 Modificați /usr/local/nginx/conf/modsecurity.conffișierul:

sed -i "s/SecRuleEngine DetectionOnly/SecRuleEngine On/" /usr/local/nginx/conf/modsecurity.conf

4.5 Adăugați fișierele OWASP ModSecurity CRS (Core Rule Set):

cd /usr/local/nginx/conf
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
cd owasp-modsecurity-crs
mv crs-setup.conf.example crs-setup.conf
cd rules
mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

Pasul 5: Test ModSecurity

Porniți Nginx:

systemctl start nginx.service

Deschideți portul 80 pentru a permite accesul exterior:

a) Pe CentOS 7:

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload

b) Pe Debian 8:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
touch /etc/iptables
iptables-save > /etc/iptables

c) Pe Ubuntu 16.04:

ufw allow OpenSSH
ufw allow 80
ufw default deny
ufw enable    

Indicați browserul dvs. către:

http://203.0.113.1/?param="><script>alert(1);</script>

Utilizați greppentru a obține mesaje de eroare după cum urmează:

grep error /usr/local/nginx/logs/error.log

Rezultatul ar trebui să includă mai multe mesaje de eroare care sunt similare cu:

2017/02/15 14:07:54 [error] 10776#0: [client 104.20.23.240] ModSecurity: Warning. detected XSS using libinjection. [file "/usr/local/nginx/conf/owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "56"] [id "941100"] [rev "2"] [msg "XSS Attack Detected via libinjection"] [data "Matched Data:  found within ARGS:param: \x22><script>alert(1);</script>"] [severity "CRITICAL"] [ver "OWASP_CRS/3.0.0"] [maturity "1"] [accuracy "9"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-xss"] [tag "OWASP_CRS/WEB_ATTACK/XSS"] [tag "WASCTC/WASC-8"] [tag "WASCTC/WASC-22"] [tag "OWASP_TOP_10/A3"] [tag "OWASP_AppSensor/IE1"] [tag "CAPEC-242"] [hostname ""] [uri "/index.html"] [unique_id "ATAcAcAkucAchGAcPLAcAcAY"]

Asta e. După cum vedeți, modulul ModSecurity a înregistrat cu succes acest atac în conformitate cu politica sa de acțiune implicită. Dacă doriți să faceți mai multe setări personalizate, consultați cu atenție și editați /usr/local/nginx/conf/modsecurity.confși /usr/local/nginx/conf/owasp-modsecurity-crs/crs-setup.conffișiere.

Lasă un comentariu

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Citiți blogul pentru a cunoaște diferitele straturi din Arhitectura Big Data și funcționalitățile acestora în cel mai simplu mod.

6 lucruri extrem de nebunești despre Nintendo Switch

6 lucruri extrem de nebunești despre Nintendo Switch

Mulți dintre voi cunoașteți Switch care va fi lansat în martie 2017 și noile sale funcții. Pentru cei care nu știu, am pregătit o listă de funcții care fac din „Switch” un „gadget obligatoriu”.

Promisiuni tehnologice care sunt încă nelivrate

Promisiuni tehnologice care sunt încă nelivrate

Aștepți ca giganții tehnologiei să-și îndeplinească promisiunile? vezi ce a ramas nelivrat.

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Citiți asta pentru a afla cum devine populară inteligența artificială în rândul companiilor la scară mică și cum crește probabilitățile de a le face să crească și de a le oferi concurenților avantaje.

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Pe măsură ce Știința Evoluează într-un ritm rapid, preluând multe dintre eforturile noastre, crește și riscurile de a ne supune unei Singularități inexplicabile. Citiți, ce ar putea însemna singularitatea pentru noi.

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA a devenit destul de dificil de rezolvat pentru utilizatori în ultimii ani. Va fi capabil să rămână eficient în detectarea spam-ului și a botului în viitor?

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Ce este telemedicina, îngrijirea medicală la distanță și impactul acesteia asupra generației viitoare? Este un loc bun sau nu în situația de pandemie? Citiți blogul pentru a găsi o vedere!

Te-ai întrebat vreodată cum câștigă hackerii bani?

Te-ai întrebat vreodată cum câștigă hackerii bani?

Poate ați auzit că hackerii câștigă mulți bani, dar v-ați întrebat vreodată cum câștigă acești bani? sa discutam.

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Recent, Apple a lansat macOS Catalina 10.15.4 o actualizare suplimentară pentru a remedia problemele, dar se pare că actualizarea provoacă mai multe probleme care duc la blocarea mașinilor Mac. Citiți acest articol pentru a afla mai multe