Hur man installerar ModSecurity för Nginx på CentOS 7, Debian 8 och Ubuntu 16.04

ModSecurity är en modul för webbapplikationsbrandvägg (WAF) med öppen källkod som är utmärkt för att skydda Apache, Nginx och IIS från olika cyberattacker som riktar sig mot potentiella sårbarheter i olika webbapplikationer

I den här artikeln kommer vi att installera och konfigurera ModSecurity för Nginx på CentOS 7, Debian 8 och Ubuntu 16.04.

Förutsättningar

  • En uppdaterad installation av CentOS 7, Debian 8 eller Ubuntu 16.04 64-bitars.
  • Loggar in som root.

Steg 1: Uppdatera systemet

Följ den här guiden och uppdatera din servers kärna och paket till den senaste tillgängliga versionen.

Steg 2: Installera beroenden

Innan du kan kompilera Nginx och ModSecurity framgångsrikt måste du installera flera mjukvarupaket enligt följande.

a) På 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) På Debian 8 eller 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

Steg 3: Kompilera ModSecurity

På grund av flera instabiliteter som rapporterats på ModSecurity för Nginx huvudgren rekommenderas det för närvarande officiellt att använda den senaste versionen av nginx_refactoringgrenen när det är möjligt.

Ladda ner nginx_refactoringgrenen av ModSecurity för Nginx:

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

Kompilera ModSecurity:

a) På 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

Obs: de två sedkommandona ovan används för att förhindra varningsmeddelanden när du använder nyare biltillverkare.

b) På Debian 8 eller Ubuntu 16.04:

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

Steg 4: Kompilera Nginx

Ladda ner och avarkivera den senaste stabila versionen av Nginx som är Nginx 1.10.3i skrivande stund:

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) På CentOS 7:

Först måste du skapa en dedikerad användare nginxoch en dedikerad grupp nginxför Nginx:

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

Kompilera sedan Nginx samtidigt som du aktiverar ModSecurity- och SSL-moduler:

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

Ändra standardanvändaren för Nginx:

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

b) På Debian 8 eller Ubuntu 16.04:

Först bör du använda den befintliga användaren www-dataoch den befintliga gruppen www-data.

Kompilera sedan Nginx samtidigt som du aktiverar ModSecurity- och SSL-moduler:

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

Ändra standardanvändaren för Nginx:

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

När Nginx har installerats kommer relaterade filer att finnas på:

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"

du kan testa installationen med:

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

Om inget går fel bör utdata vara:

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

För din bekvämlighet kan du ställa in en systemd enhetsfil för 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

När du går framåt kan du starta/stoppa/starta om Nginx enligt följande:

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

Steg 4: Konfigurera ModSecurity och Nginx

4.1 Konfigurera Nginx:

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

Hitta följande segment inom http {}segmentet:

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

Infoga nedanstående rader i location / {}segmentet:

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

Slutresultatet bör vara:

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

Spara och avsluta:

:wq!

Obs: Nginx-konfigurationen ovan är bara en exempelkonfiguration för att använda Nginx som en webbserver snarare än en omvänd proxy. Om du använder Nginx som en omvänd proxy, ta bort #tecknet på de två sista raderna och gör lämpliga ändringar av dem.

4.2 Skapa en fil med namnet /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

Obs: Konfigurationen ovan kommer att tillämpa alla OWASP ModSecurity Core Rules i owasp-modsecurity-crs/rules/katalogen. Om du bara vill tillämpa selektiva regler bör du ta bort include owasp-modsecurity-crs/rules/*.confraden och sedan ange exakta regler du behöver efter steg 4.5.

4.3 Importera ModSecurity-konfigurationsfiler:

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 Ändra /usr/local/nginx/conf/modsecurity.conffilen:

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

4.5 Lägg till OWASP ModSecurity CRS-filer (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

Steg 5: Testa ModSecurity

Starta Nginx:

systemctl start nginx.service

Öppna port 80 för att tillåta extern åtkomst:

a) På CentOS 7:

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

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

ufw allow OpenSSH
ufw allow 80
ufw default deny
ufw enable    

Peka din webbläsare till:

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

Använd för grepatt hämta felmeddelanden enligt följande:

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

Utdata bör innehålla flera felmeddelanden som liknar:

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

Det är allt. Som du ser har ModSecurity-modulen lyckats logga denna attack i enlighet med dess standardåtgärdspolicy. Om du vill göra fler anpassade inställningar, vänligen granska och redigera /usr/local/nginx/conf/modsecurity.confoch /usr/local/nginx/conf/owasp-modsecurity-crs/crs-setup.conffiler noggrant .

Lämna en kommentar

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Artificiell intelligens är inte i framtiden, det är här i nuet I den här bloggen Läs hur Artificiell intelligens-applikationer har påverkat olika sektorer.

DDOS-attacker: En kort översikt

DDOS-attacker: En kort översikt

Är du också ett offer för DDOS-attacker och förvirrad över de förebyggande metoderna? Läs den här artikeln för att lösa dina frågor.

Har du någonsin undrat hur hackare tjänar pengar?

Har du någonsin undrat hur hackare tjänar pengar?

Du kanske har hört att hackare tjänar mycket pengar, men har du någonsin undrat hur de tjänar den typen av pengar? låt oss diskutera.

Revolutionerande uppfinningar från Google som gör ditt liv lätt.

Revolutionerande uppfinningar från Google som gör ditt liv lätt.

Vill du se revolutionerande uppfinningar av Google och hur dessa uppfinningar förändrade livet för varje människa idag? Läs sedan till bloggen för att se uppfinningar av Google.

Fredag ​​Essential: Vad hände med AI-drivna bilar?

Fredag ​​Essential: Vad hände med AI-drivna bilar?

Konceptet med att självkörande bilar ska ut på vägarna med hjälp av artificiell intelligens är en dröm vi har ett tag nu. Men trots flera löften finns de ingenstans att se. Läs den här bloggen för att lära dig mer...

Technological Singularity: A Distant Future of Human Civilization?

Technological Singularity: A Distant Future of Human Civilization?

När vetenskapen utvecklas i snabb takt och tar över en hel del av våra ansträngningar, ökar också riskerna för att utsätta oss för en oförklarlig singularitet. Läs, vad singularitet kan betyda för oss.

Funktioner för Big Data Reference Architecture Layers

Funktioner för Big Data Reference Architecture Layers

Läs bloggen för att känna till olika lager i Big Data Architecture och deras funktionaliteter på enklaste sätt.

Utveckling av datalagring – Infographic

Utveckling av datalagring – Infographic

Lagringsmetoderna för data har utvecklats kan vara sedan födelsen av data. Den här bloggen tar upp utvecklingen av datalagring på basis av en infografik.

6 fantastiska fördelar med att ha smarta hemenheter i våra liv

6 fantastiska fördelar med att ha smarta hemenheter i våra liv

I denna digitala värld har smarta hemenheter blivit en avgörande del av livet. Här är några fantastiska fördelar med smarta hemenheter om hur de gör vårt liv värt att leva och enklare.

macOS Catalina 10.15.4 tilläggsuppdatering orsakar fler problem än att lösa

macOS Catalina 10.15.4 tilläggsuppdatering orsakar fler problem än att lösa

Nyligen släppte Apple macOS Catalina 10.15.4, en tilläggsuppdatering för att åtgärda problem, men det verkar som om uppdateringen orsakar fler problem som leder till att mac-datorer blir murade. Läs den här artikeln för att lära dig mer