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.


Namestite Plesk na CentOS 7

Namestite Plesk na CentOS 7

Uporaba drugega sistema? Plesk je lastniška nadzorna plošča spletnega gostitelja, ki uporabnikom omogoča upravljanje svojih osebnih in/ali strank spletnih mest, baz podatkov

Kako namestiti Squid Proxy na CentOS

Kako namestiti Squid Proxy na CentOS

Squid je priljubljen brezplačen program za Linux, ki vam omogoča ustvarjanje spletnega proxyja za posredovanje. V tem priročniku boste videli, kako namestiti Squid na CentOS, da vas obrne

Kako namestiti Lighttpd (LLMP Stack) na CentOS 6

Kako namestiti Lighttpd (LLMP Stack) na CentOS 6

Uvod Lighttpd je razdelek Apache, katerega namen je biti veliko manj intenziven vir. Je lahek, od tod tudi njegovo ime, in je precej preprost za uporabo. Namestite

Konfiguriranje statičnega omrežja in IPv6 na CentOS 7

Konfiguriranje statičnega omrežja in IPv6 na CentOS 7

VULTR je pred kratkim naredil spremembe na svoji strani in zdaj bi moralo vse delovati v redu iz škatle z omogočenim NetworkManagerjem. Če želite onemogočiti

Spreminjanje Icinga2 za uporabo modela Master/Client na CentOS 6 ali CentOS 7

Spreminjanje Icinga2 za uporabo modela Master/Client na CentOS 6 ali CentOS 7

Icinga2 je zmogljiv sistem za spremljanje in če se uporablja v modelu glavni-odjemalec, lahko nadomesti potrebo po nadzornih pregledih, ki temeljijo na NRPE. Glavni naročnik

Kako namestiti Apache Cassandra 3.11.x na CentOS 7

Kako namestiti Apache Cassandra 3.11.x na CentOS 7

Uporaba drugega sistema? Apache Cassandra je brezplačen in odprtokodni sistem za upravljanje baz podatkov NoSQL, ki je zasnovan tako, da zagotavlja razširljivost, visoko

Kako namestiti Microweber na CentOS 7

Kako namestiti Microweber na CentOS 7

Uporaba drugega sistema? Microweber je odprtokodna povleci in spusti CMS in spletna trgovina. Izvorna koda Microweber gostuje na GitHubu. Ta vodnik vam bo pokazal

Kako namestiti Mattermost 4.1 na CentOS 7

Kako namestiti Mattermost 4.1 na CentOS 7

Uporaba drugega sistema? Mattermost je odprtokodna alternativa sporočilni storitvi Slack SAAS, ki jo gosti sami. Z drugimi besedami, z Mattermostom si pribl

Ustvarjanje omrežja strežnikov Minecraft z BungeeCord na Debian 8, Debian 9 ali CentOS 7

Ustvarjanje omrežja strežnikov Minecraft z BungeeCord na Debian 8, Debian 9 ali CentOS 7

Kaj potrebujete Vultr VPS z vsaj 1 GB RAM-a. SSH dostop (z root/administrativnimi pravicami). 1. korak: Namestitev BungeeCord Najprej najprej

Omogočamo šifriranje na Plesku

Omogočamo šifriranje na Plesku

Nadzorna plošča Plesk ima zelo lepo integracijo za Lets Encrypt. Lets Encrypt je eden edinih ponudnikov SSL, ki izdaja potrdila v celoti

Namestite MariaDB 10 na CentOS 6

Namestite MariaDB 10 na CentOS 6

V času pisanja je MariaDB 10.1 razvojna različica MariaDB. Temelji na MariaDB 5.5 in vključuje funkcije, prenesene nazaj iz MySQL 5.6. Ther

Omogoča šifriranje na cPanelu

Omogoča šifriranje na cPanelu

Lets Encrypt je certifikacijski organ, ki je namenjen brezplačnemu zagotavljanju certifikatov SSL. cPanel je zgradil lepo integracijo za vas in vašo stranko

Kako namestiti Concrete5 na CentOS 7

Kako namestiti Concrete5 na CentOS 7

Uporaba drugega sistema? Concrete5 je odprtokodni CMS, ki ponuja številne značilne in uporabne funkcije za pomoč urednikom pri preprosti izdelavi vsebine.

Kako namestiti pregledno ploščo na CentOS 7

Kako namestiti pregledno ploščo na CentOS 7

Uporaba drugega sistema? Review Board je brezplačno in odprtokodno orodje za pregledovanje izvorne kode, dokumentacije, slik in še veliko več. Gre za spletno programsko opremo

Nastavite preverjanje pristnosti HTTP z Nginxom na CentOS 7

Nastavite preverjanje pristnosti HTTP z Nginxom na CentOS 7

V tem priročniku se boste naučili, kako nastaviti preverjanje pristnosti HTTP za spletni strežnik Nginx, ki deluje na CentOS 7. Zahteve Za začetek boste potrebovali

Kako namestiti YOURLS na CentOS 7

Kako namestiti YOURLS na CentOS 7

YOURLS (Your Own URL Shortener) je odprtokodna aplikacija za krajšanje URL-jev in analitiko podatkov. V tem članku bomo obravnavali postopek namestitve

Kako namestiti in konfigurirati ArangoDB na CentOS 7

Kako namestiti in konfigurirati ArangoDB na CentOS 7

Uporaba drugega sistema? Uvod ArangoDB je odprtokodna baza podatkov NoSQL s prilagodljivim podatkovnim modelom za dokumente, grafe in ključe-vrednosti. je

Uporaba Etckeeperja za nadzor različic /etc

Uporaba Etckeeperja za nadzor različic /etc

Uvod Imenik /etc/ igra ključno vlogo pri delovanju sistema Linux. Razlog za to je skoraj vsaka sistemska konfiguracija

Zakaj bi morali uporabljati SSHFS? Kako namestiti oddaljeni datotečni sistem s SSHFS na CentOS 6

Zakaj bi morali uporabljati SSHFS? Kako namestiti oddaljeni datotečni sistem s SSHFS na CentOS 6

Številni sistemski skrbniki upravljajo velike količine strežnikov. Ko je treba do datotek dostopati prek različnih strežnikov, se prijavite v vsakega posebej ca

Nastavitev strežnika Half Life 2 na CentOS 6

Nastavitev strežnika Half Life 2 na CentOS 6

Ta vadnica bo obravnavala postopek namestitve igralnega strežnika Half Life 2 na sistem CentOS 6. 1. korak: Namestitev predpogojev Za nastavitev ou

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.

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.

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.

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č