Kako instalirati ModSecurity za Nginx na CentOS 7, Debian 8 i Ubuntu 16.04

ModSecurity je modul vatrozida web aplikacije (WAF) otvorenog koda koji je izvrstan za zaštitu Apachea, Nginxa i IIS-a od raznih cyber napada koji ciljaju na potencijalne ranjivosti u raznim web aplikacijama

U ovom članku ćemo instalirati i konfigurirati ModSecurity za Nginx na CentOS 7, Debian 8 i Ubuntu 16.04.

Preduvjeti

  • Up-to-date instalacija CentOS 7, Debian 8, ili Ubuntu 16.04 64-bitni.
  • Prijava kao root.

Korak 1: Ažurirajte sustav

Slijedeći ovaj vodič , ažurirajte kernel i pakete vašeg poslužitelja na najnoviju dostupnu verziju.

Korak 2: Instalirajte ovisnosti

Prije nego što uspješno prevedete Nginx i ModSecurity, morate instalirati nekoliko softverskih paketa kako slijedi.

a) Na CentOS-u 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) Na Debianu 8 ili 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

Korak 3: Sastavite ModSecurity

Zbog nekoliko nestabilnosti prijavljenih na ModSecurity za Nginx master granu, za sada se službeno preporučuje korištenje najnovije verzije nginx_refactoringgrane kad god je to moguće.

Preuzmite nginx_refactoringgranu ModSecurity za Nginx:

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

Sastavite ModSecurity:

a) Na CentOS-u 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

Napomena: sedgornje dvije naredbe koriste se za sprječavanje poruka upozorenja kada se koriste novije automake verzije.

b) Na Debianu 8 ili Ubuntu 16.04:

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

Korak 4: kompajlirajte Nginx

Preuzmite i dearhivirajte najnovije stabilno izdanje Nginxa koje je Nginx 1.10.3u trenutku pisanja:

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) Na CentOS-u 7:

Prvo morate stvoriti namjenskog korisnika nginxi namjensku grupu nginxza Nginx:

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

Zatim kompajlirajte Nginx uz omogućavanje ModSecurity i SSL modula:

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

Izmijenite zadanog korisnika Nginxa:

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

b) Na Debianu 8 ili Ubuntu 16.04:

Prvo, trebali biste koristiti postojećeg korisnika www-datai postojeću grupu www-data.

Zatim kompajlirajte Nginx uz omogućavanje ModSecurity i SSL modula:

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

Izmijenite zadanog korisnika Nginxa:

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

Nakon što je Nginx uspješno instaliran, povezane datoteke će se nalaziti na:

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"

možete testirati instalaciju sa:

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

Ako ništa ne krene po zlu, izlaz bi trebao biti:

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

Radi vaše udobnosti, možete postaviti systemd jediničnu datoteku za 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

Idući naprijed, Nginx možete pokrenuti/zaustaviti/ponovno pokrenuti na sljedeći način:

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

Korak 4: Konfigurirajte ModSecurity i Nginx

4.1 Konfigurirajte Nginx:

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

Pronađite sljedeći segment unutar http {}segmenta:

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

Umetnite donje linije u location / {}segment:

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

Konačni rezultat bi trebao biti:

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

Spremi i zatvori:

:wq!

Napomena: Gornja konfiguracija Nginxa samo je primjer konfiguracije za korištenje Nginxa kao web poslužitelja, a ne obrnutog proxyja. Ako koristite Nginx kao obrnuti proxy, uklonite #znak u zadnja dva retka i izvršite odgovarajuće izmjene na njima.

4.2 Napravite datoteku pod nazivom /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

Napomena: Gornja konfiguracija će primijeniti sva OWASP ModSecurity Core pravila u owasp-modsecurity-crs/rules/direktoriju. Ako želite primijeniti samo selektivna pravila, trebate ukloniti include owasp-modsecurity-crs/rules/*.confredak, a zatim odrediti točna pravila koja su vam potrebna nakon koraka 4.5.

4.3 Uvoz konfiguracijskih datoteka 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 Izmijenite /usr/local/nginx/conf/modsecurity.confdatoteku:

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

4.5 Dodajte datoteke 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

Korak 5: Testirajte ModSecurity

Pokrenite Nginx:

systemctl start nginx.service

Otvorite port 80 kako biste omogućili vanjski pristup:

a) Na CentOS-u 7:

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

b) Na Debianu 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) Na Ubuntu 16.04:

ufw allow OpenSSH
ufw allow 80
ufw default deny
ufw enable    

Usmjerite svoj web preglednik na:

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

Koristite grepza dohvaćanje poruka o pogrešci na sljedeći način:

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

Izlaz bi trebao sadržavati nekoliko poruka o pogrešci koje su slične:

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"]

To je to. Kao što vidite, ModSecurity modul je uspješno zabilježio ovaj napad u skladu sa svojom zadanom politikom djelovanja. Ako želite učiniti više prilagođene postavke, pažljivo pregledajte i uređivanje /usr/local/nginx/conf/modsecurity.confi /usr/local/nginx/conf/owasp-modsecurity-crs/crs-setup.confdatoteka.

Ostavite komentar

Uspon strojeva: primjene AI u stvarnom svijetu

Uspon strojeva: primjene AI u stvarnom svijetu

Umjetna inteligencija nije u budućnosti, ovdje je upravo u sadašnjosti. U ovom blogu Pročitajte kako su aplikacije umjetne inteligencije utjecale na različite sektore.

DDOS napadi: kratak pregled

DDOS napadi: kratak pregled

Jeste li i vi žrtva DDOS napada i zbunjeni ste metodama prevencije? Pročitajte ovaj članak kako biste riješili svoje upite.

Jeste li se ikada zapitali kako hakeri zarađuju novac?

Jeste li se ikada zapitali kako hakeri zarađuju novac?

Možda ste čuli da hakeri zarađuju mnogo novca, ali jeste li se ikada zapitali kako zarađuju toliki novac? raspravimo.

Revolucionarni Googleovi izumi koji će vam olakšati život.

Revolucionarni Googleovi izumi koji će vam olakšati život.

Želite li vidjeti revolucionarne izume Googlea i kako su ti izumi promijenili život svakog čovjeka danas? Zatim čitajte na blogu kako biste vidjeli Googleove izume.

Friday Essential: Što se dogodilo s automobilima s umjetnom inteligencijom?

Friday Essential: Što se dogodilo s automobilima s umjetnom inteligencijom?

Koncept samovozećih automobila koji će krenuti na ceste uz pomoć umjetne inteligencije san je koji već neko vrijeme imamo. No, unatoč nekoliko obećanja, nigdje ih nema. Pročitajte ovaj blog kako biste saznali više…

Tehnološka singularnost: daleka budućnost ljudske civilizacije?

Tehnološka singularnost: daleka budućnost ljudske civilizacije?

Kako se znanost razvija velikom brzinom, preuzimajući mnoge naše napore, raste i rizik da se podvrgnemo neobjašnjivoj Singularnosti. Pročitajte što bi za nas mogla značiti singularnost.

Funkcionalnosti slojeva referentne arhitekture velikih podataka

Funkcionalnosti slojeva referentne arhitekture velikih podataka

Pročitajte blog kako biste na najjednostavniji način upoznali različite slojeve u arhitekturi velikih podataka i njihove funkcionalnosti.

Evolucija pohrane podataka – Infografika

Evolucija pohrane podataka – Infografika

Metode pohrane podataka su se razvijale možda od rođenja podataka. Ovaj blog pokriva evoluciju pohrane podataka na temelju infografike.

6 nevjerojatnih prednosti posjedovanja pametnih kućnih uređaja u našim životima

6 nevjerojatnih prednosti posjedovanja pametnih kućnih uređaja u našim životima

U ovom digitalnom svijetu, pametni kućni uređaji postali su ključni dio života. Evo nekoliko nevjerojatnih prednosti pametnih kućnih uređaja o tome kako naš život čine vrijednim življenja i jednostavnijim.

Ažuriranje dodataka macOS Catalina 10.15.4 uzrokuje više problema nego što ih rješava

Ažuriranje dodataka macOS Catalina 10.15.4 uzrokuje više problema nego što ih rješava

Nedavno je Apple izdao macOS Catalina 10.15.4 dodatak ažuriranju kako bi riješio probleme, ali čini se da ažuriranje uzrokuje više problema koji dovode do zalijevanja mac strojeva. Pročitajte ovaj članak da biste saznali više