Kaip įdiegti „ModSecurity“, skirtą „Nginx“ „CentOS 7“, „Debian 8“ ir „Ubuntu 16.04“

ModSecurity yra atvirojo kodo žiniatinklio programų ugniasienės (WAF) modulis, puikiai tinkantis apsaugoti Apache, Nginx ir IIS nuo įvairių kibernetinių atakų, nukreiptų į galimus įvairių žiniatinklio programų pažeidžiamumus.

Šiame straipsnyje mes įdiegsime ir sukonfigūruosime „ModSecurity“, skirtą „Nginx“, „CentOS 7“, „Debian 8“ ir „Ubuntu 16.04“.

Būtinos sąlygos

  • Up-to-data įrengimas CentOS 7, Debian 8, ar Ubuntu 16.04 64 bitų.
  • Prisijungimas kaip root.

1 veiksmas: atnaujinkite sistemą

Vadovaudamiesi šiuo vadovu atnaujinkite savo serverio branduolį ir paketus į naujausią galimą versiją.

2 veiksmas: įdiekite priklausomybes

Kad galėtumėte sėkmingai kompiliuoti Nginx ir ModSecurity, turite įdiegti kelis programinės įrangos paketus, kaip nurodyta toliau.

a) „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) „Debian 8“ arba „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

3 veiksmas: sukompiliuokite „ModSecurity“.

Dėl kelių nestabilumo, apie kurį pranešta „ModSecurity for Nginx“ pagrindinėje šakoje, kol kas oficialiai rekomenduojama naudoti naujausią nginx_refactoringšakos versiją, kai tik įmanoma.

Atsisiųskite „ nginx_refactoringNginx“ skirtą „ModSecurity“ filialą:

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

Sukompiliuokite „ModSecurity“:

a) „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

Pastaba: dvi sedaukščiau pateiktos komandos naudojamos siekiant išvengti įspėjimo pranešimų, kai naudojamos naujesnės versijos.

b) „Debian 8“ arba „Ubuntu 16.04“:

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

4 veiksmas: sukompiliuokite Nginx

Atsisiųskite ir išarchyvuokite naujausią stabilų „Nginx“ leidimą, kuris yra Nginx 1.10.3rašymo metu:

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) „CentOS 7“:

Pirmiausia turite sukurti skirtą Nginx vartotoją nginxir grupę nginx:

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

Tada sukompiliuokite Nginx įjungdami ModSecurity ir SSL modulius:

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

Pakeiskite numatytąjį Nginx vartotoją:

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

b) „Debian 8“ arba „Ubuntu 16.04“:

Pirmiausia turėtumėte naudoti esamą vartotoją www-datair esamą grupę www-data.

Tada sukompiliuokite Nginx įjungdami ModSecurity ir SSL modulius:

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

Pakeiskite numatytąjį Nginx vartotoją:

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

Sėkmingai įdiegus „Nginx“, susiję failai bus rasti adresu:

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"

diegimą galite išbandyti naudodami:

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

Jei nieko negerai, išvestis turėtų būti:

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

Patogumui galite nustatyti Nginx sistemos vieneto failą:

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

Eidami į priekį, galite paleisti / sustabdyti / iš naujo paleisti „Nginx“ taip:

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

4 veiksmas: sukonfigūruokite „ModSecurity“ ir „Nginx“.

4.1 „Nginx“ konfigūravimas:

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

Segmente raskite šį http {}segmentą:

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

Į location / {}segmentą įterpkite šias eilutes :

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

Galutinis rezultatas turėtų būti:

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

Išsaugoti ir išeiti:

:wq!

Pastaba: Aukščiau pateikta Nginx konfigūracija yra tik pavyzdinė konfigūracija, skirta naudoti Nginx kaip žiniatinklio serverį, o ne atvirkštinį tarpinį serverį. Jei naudojate Nginx kaip atvirkštinį tarpinį serverį, pašalinkite #simbolį paskutinėse dviejose eilutėse ir atlikite atitinkamus jų pakeitimus.

4.2 Sukurkite failą pavadinimu /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

Pastaba: Aukščiau pateikta konfigūracija taikys visas OWASP ModSecurity pagrindines taisykles owasp-modsecurity-crs/rules/kataloge. Jei norite taikyti tik pasirinktines taisykles, pašalinkite include owasp-modsecurity-crs/rules/*.confeilutę ir nurodykite tikslias taisykles, kurių jums reikia po 4.5 veiksmo.

4.3 Importuoti ModSecurity konfigūracijos failus:

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 Keisti /usr/local/nginx/conf/modsecurity.conffailą:

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

4.5 Pridėkite OWASP ModSecurity CRS (pagrindinių taisyklių rinkinio) failus:

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

5 veiksmas: patikrinkite „ModSecurity“.

Paleiskite Nginx:

systemctl start nginx.service

Atidarykite 80 prievadą, kad galėtumėte pasiekti išorinę prieigą:

a) „CentOS 7“:

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

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

ufw allow OpenSSH
ufw allow 80
ufw default deny
ufw enable    

Nukreipkite savo žiniatinklio naršyklę į:

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

Norėdami grepgauti klaidų pranešimus, naudokite taip:

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

Išvestyje turėtų būti keli klaidų pranešimai, panašūs į:

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

Viskas. Kaip matote, ModSecurity modulis sėkmingai užregistravo šią ataką pagal numatytąją veiksmų politiką. Jei norite atlikti daugiau tinkintų nustatymų, atidžiai peržiūrėkite ir redaguokite /usr/local/nginx/conf/modsecurity.confbei /usr/local/nginx/conf/owasp-modsecurity-crs/crs-setup.conffailus.

Palikti komentarą

Mašinų augimas: AI pritaikymas realiame pasaulyje

Mašinų augimas: AI pritaikymas realiame pasaulyje

Dirbtinis intelektas nėra ateityje, jis čia, dabartyje Šiame tinklaraštyje Skaitykite, kaip dirbtinio intelekto programos paveikė įvairius sektorius.

DDOS atakos: trumpa apžvalga

DDOS atakos: trumpa apžvalga

Ar taip pat esate DDOS atakų auka ir esate sumišęs dėl prevencijos metodų? Perskaitykite šį straipsnį, kad išspręstumėte savo užklausas.

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Galbūt girdėjote, kad įsilaužėliai uždirba daug pinigų, bet ar kada susimąstėte, kaip jie uždirba tokius pinigus? padiskutuokime.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Ar norite pamatyti revoliucinius „Google“ išradimus ir kaip šie išradimai pakeitė kiekvieno žmogaus gyvenimą šiandien? Tada skaitykite tinklaraštį, kad pamatytumėte „Google“ išradimus.

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Savavaledžių automobilių koncepcija, kuri išvažiuotų į kelius su dirbtinio intelekto pagalba, yra svajonė, kurią jau kurį laiką svajojame. Tačiau nepaisant kelių pažadų, jų niekur nematyti. Skaitykite šį tinklaraštį, kad sužinotumėte daugiau…

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Kadangi mokslas sparčiai vystosi, perimdamas daug mūsų pastangų, taip pat didėja rizika, kad pateksime į nepaaiškinamą singuliarumą. Skaitykite, ką mums gali reikšti išskirtinumas.

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Skaitykite tinklaraštį, kad paprasčiausiai sužinotumėte apie skirtingus didžiųjų duomenų architektūros sluoksnius ir jų funkcijas.

Duomenų saugojimo raida – infografika

Duomenų saugojimo raida – infografika

Duomenų saugojimo metodai gali būti tobulinami nuo pat Duomenų gimimo. Šiame tinklaraštyje, remiantis infografika, aprašoma duomenų saugojimo raida.

6 nuostabūs išmaniųjų namų įrenginių privalumai

6 nuostabūs išmaniųjų namų įrenginių privalumai

Šiame skaitmeniniu būdu pagrįstame pasaulyje išmanieji namų įrenginiai tapo svarbia gyvenimo dalimi. Štai keletas nuostabių išmaniųjų namų įrenginių privalumų, kaip jie daro mūsų gyvenimą vertą gyventi ir paprastesnį.

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

Neseniai „Apple“ išleido „macOS Catalina 10.15.4“ priedą, skirtą problemoms išspręsti, tačiau atrodo, kad dėl atnaujinimo kyla daugiau problemų, dėl kurių „Mac“ įrenginiai blokuojami. Norėdami sužinoti daugiau, perskaitykite šį straipsnį