Kako namestiti ModSecurity za Nginx na CentOS 7, Debian 8 in Ubuntu 16.04

ModSecurity je odprtokodni modul požarnega zidu spletnih aplikacij (WAF), ki je odličen za zaščito Apache, Nginx in IIS pred različnimi kibernetskimi napadi, ki ciljajo na morebitne ranljivosti v različnih spletnih aplikacijah.

V tem članku bomo namestili in konfigurirali ModSecurity za Nginx na CentOS 7, Debian 8 in Ubuntu 16.04.

Predpogoji

  • Up-to-datum namestitev CentOS 7, Debian 8 ali Ubuntu 16.04 64-bitni.
  • Prijava kot root.

1. korak: Posodobite sistem

Po tem priročniku posodobite jedro in pakete vašega strežnika na najnovejšo razpoložljivo različico.

2. korak: Namestite odvisnosti

Preden lahko uspešno prevedete Nginx in ModSecurity, morate namestiti več programskih paketov, kot sledi.

a) Na 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) V Debianu 8 ali 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. korak: Prevedi ModSecurity

Zaradi več nestabilnosti, o katerih so poročali na ModSecurity za glavno vejo Nginx, je za zdaj uradno priporočljiva uporaba najnovejše različice nginx_refactoringveje, kadar koli je to mogoče.

Prenesite nginx_refactoringvejo ModSecurity za Nginx:

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

Prevedi ModSecurity:

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

Opomba: sedzgornja dva ukaza se uporabljata za preprečevanje opozorilnih sporočil pri uporabi novejših različic automake.

b) V Debianu 8 ali Ubuntu 16.04:

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

4. korak: Prevedi Nginx

Prenesite in odstranite arhiv najnovejše stabilne izdaje Nginxa, ki je Nginx 1.10.3v času 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 7:

Najprej morate ustvariti namenskega uporabnika nginxin namensko skupino nginxza Nginx:

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

Nato prevedite Nginx in hkrati omogočite modula ModSecurity in 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

Spremenite privzetega uporabnika Nginxa:

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

b) V Debianu 8 ali Ubuntu 16.04:

Najprej morate uporabiti obstoječega uporabnika www-datain obstoječo skupino www-data.

Nato prevedite Nginx in hkrati omogočite modula ModSecurity in 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

Spremenite privzetega uporabnika Nginxa:

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

Ko je Nginx uspešno nameščen, se bodo povezane datoteke nahajale 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"

namestitev lahko preizkusite z:

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

Če ne gre nič narobe, mora biti rezultat:

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

Za vaše udobje lahko nastavite datoteko sistemske enote 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

Če se premikate naprej, lahko zaženete/ustavite/ponovno zaženete Nginx na naslednji način:

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

4. korak: Konfigurirajte ModSecurity in Nginx

4.1 Konfigurirajte Nginx:

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

Poiščite naslednji segment znotraj http {}segmenta:

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

V location / {}segment vstavite spodnje vrstice :

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

Končni rezultat bi moral biti:

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

Shrani in zapusti:

:wq!

Opomba: Zgornja konfiguracija Nginxa je le vzorčna konfiguracija za uporabo Nginxa kot spletnega strežnika in ne povratnega proxyja. Če uporabljate Nginx kot povratni proxy, odstranite #znak v zadnjih dveh vrsticah in ju ustrezno spremenite.

4.2 Ustvarite datoteko z imenom /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

Opomba: Zgornja konfiguracija bo uporabila vsa osnovna pravila OWASP ModSecurity v owasp-modsecurity-crs/rules/imeniku. Če želite uporabiti samo selektivna pravila, odstranite include owasp-modsecurity-crs/rules/*.confvrstico in nato po koraku 4.5 določite natančna pravila, ki jih potrebujete.

4.3 Uvozi konfiguracijske datoteke 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 Spremenite /usr/local/nginx/conf/modsecurity.confdatoteko:

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

5. korak: Preizkusite ModSecurity

Zaženite Nginx:

systemctl start nginx.service

Odprite vrata 80, da omogočite zunanji dostop:

a) Na CentOS 7:

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

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

ufw allow OpenSSH
ufw allow 80
ufw default deny
ufw enable    

Usmerite svoj spletni brskalnik na:

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

Uporabite grepza pridobivanje sporočil o napakah, kot sledi:

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

Izhod mora vključevati več sporočil o napakah, ki so podobna:

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. Kot vidite, je modul ModSecurity uspešno zabeležil ta napad v skladu s svojo privzeto politiko dejanj. Če želite več nastavitev po meri, pozorno preberite in urejanje /usr/local/nginx/conf/modsecurity.confin /usr/local/nginx/conf/owasp-modsecurity-crs/crs-setup.confdatotek.

Pusti komentar

Vzpon strojev: aplikacije AI v resničnem svetu

Vzpon strojev: aplikacije AI v resničnem svetu

Umetna inteligenca ni v prihodnosti, tukaj je prav v sedanjosti. V tem blogu preberite, kako so aplikacije umetne inteligence vplivale na različne sektorje.

DDOS napadi: kratek pregled

DDOS napadi: kratek pregled

Ste tudi vi žrtev DDOS napadov in ste zmedeni glede načinov preprečevanja? Preberite ta članek, če želite rešiti svoja vprašanja.

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Ste se kdaj vprašali, kako hekerji zaslužijo denar?

Morda ste že slišali, da hekerji zaslužijo veliko denarja, a ste se kdaj vprašali, kako zaslužijo takšen denar? razpravljajmo.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Revolucionarni Googlovi izumi, ki vam bodo olajšali življenje.

Ali želite videti revolucionarne izume Googla in kako so ti izumi danes spremenili življenje vsakega človeka? Nato preberite v blogu in si oglejte Googlove izume.

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Friday Essential: Kaj se je zgodilo z avtomobili, ki jih poganja umetna inteligenca?

Koncept samovozečih avtomobilov, ki zapeljejo na ceste s pomočjo umetne inteligence, so sanje, ki jih imamo že nekaj časa. A kljub številnim obljubam jih ni nikjer. Preberite ta blog, če želite izvedeti več…

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Tehnološka singularnost: oddaljena prihodnost človeške civilizacije?

Ker se znanost hitro razvija in prevzame veliko naših prizadevanj, se povečuje tudi tveganje, da se podvržemo nerazložljivi singularnosti. Preberite, kaj bi za nas lahko pomenila singularnost.

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Funkcionalnosti slojev referenčne arhitekture velikih podatkov

Preberite blog, če želite na najpreprostejši način spoznati različne plasti v arhitekturi velikih podatkov in njihove funkcionalnosti.

Razvoj shranjevanja podatkov – Infografika

Razvoj shranjevanja podatkov – Infografika

Metode shranjevanja podatkov so se lahko razvijale od rojstva podatkov. Ta blog pokriva razvoj shranjevanja podatkov na podlagi infografike.

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

6 neverjetnih prednosti pametnih naprav za dom v našem življenju

V tem digitalno vodenem svetu so pametne naprave za dom postale ključni del življenja. Tukaj je nekaj neverjetnih prednosti pametnih naprav za dom o tem, kako naredijo naše življenje vredno življenja in poenostavijo.

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Posodobitev dodatka macOS Catalina 10.15.4 povzroča več težav kot jih rešuje

Pred kratkim je Apple izdal macOS Catalina 10.15.4 dopolnilno posodobitev za odpravo težav, vendar se zdi, da posodobitev povzroča več težav, ki vodijo do opečenja računalnikov Mac. Preberite ta članek, če želite izvedeti več