Jak zainstalować ModSecurity dla Nginx na CentOS 7, Debian 8 i Ubuntu 16.04

ModSecurity to moduł zapory sieciowej typu open source (WAF), który doskonale nadaje się do ochrony Apache, Nginx i IIS przed różnymi cyberatakami atakującymi potencjalne luki w różnych aplikacjach internetowych

W tym artykule zainstalujemy i skonfigurujemy ModSecurity dla Nginx na CentOS 7, Debian 8 i Ubuntu 16.04.

Wymagania wstępne

  • Up-to-date instalacji CentOS, Debian 7 lub 8, Ubuntu 16.04 64-bit.
  • Logowanie jako root.

Krok 1: Zaktualizuj system

Zgodnie z tym przewodnikiem zaktualizuj jądro i pakiety serwera do najnowszej dostępnej wersji.

Krok 2: zainstaluj zależności

Aby pomyślnie skompilować Nginx i ModSecurity, musisz zainstalować kilka pakietów oprogramowania w następujący sposób.

a) W 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) W systemie Debian 8 lub 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

Krok 3: Skompiluj ModSecurity

Ze względu na kilka niestabilności zgłoszonych w gałęzi ModSecurity dla gałęzi głównej Nginx, oficjalnie zaleca się na razie używanie najnowszej wersji nginx_refactoringgałęzi.

Pobierz nginx_refactoringgałąź ModSecurity dla Nginx:

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

Skompiluj ModSecurity:

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

Uwaga: dwa sedpowyższe polecenia służą do zapobiegania komunikatom ostrzegawczym podczas korzystania z nowszych wersji automake.

b) W systemie Debian 8 lub Ubuntu 16.04:

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

Krok 4: Skompiluj Nginx

Pobierz i rozpakuj najnowszą stabilną wersję Nginx, która jest Nginx 1.10.3w momencie pisania:

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) W CentOS 7:

Najpierw musisz utworzyć dedykowanego użytkownika nginxi dedykowaną grupę nginxdla Nginx:

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

Następnie skompiluj Nginx, włączając ModSecurity i moduły 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

Zmodyfikuj domyślnego użytkownika Nginx:

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

b) W systemie Debian 8 lub Ubuntu 16.04:

Po pierwsze, powinieneś użyć istniejącego użytkownika www-datai istniejącej grupy www-data.

Następnie skompiluj Nginx, włączając ModSecurity i moduły 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

Zmodyfikuj domyślnego użytkownika Nginx:

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

Po pomyślnym zainstalowaniu Nginx powiązane pliki będą znajdować się w:

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żesz przetestować instalację za pomocą:

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

Jeśli nic nie pójdzie źle, wynikiem powinno być:

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

Dla Twojej wygody możesz skonfigurować systemowy plik jednostki dla 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

Przechodząc do przodu, możesz uruchomić / zatrzymać / ponownie uruchomić Nginx w następujący sposób:

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

Krok 4: Skonfiguruj ModSecurity i Nginx

4.1 Konfiguracja Nginx:

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

Znajdź następujący segment w obrębie http {}segmentu:

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

Wstaw poniższe linie do location / {}segmentu:

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

Ostateczny wynik powinien wynosić:

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

Zapisz i wyjdź:

:wq!

Uwaga: powyższa konfiguracja Nginx jest tylko przykładową konfiguracją do używania Nginx jako serwera WWW zamiast odwrotnego proxy. Jeśli używasz Nginx jako odwrotnego proxy, usuń #znak w dwóch ostatnich wierszach i wprowadź odpowiednie modyfikacje.

4.2 Utwórz plik o nazwie /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

Uwaga: powyższa konfiguracja zastosuje wszystkie OWASP ModSecurity Core Rules w owasp-modsecurity-crs/rules/katalogu. Jeśli chcesz zastosować tylko reguły selektywne, powinieneś usunąć include owasp-modsecurity-crs/rules/*.conflinię, a następnie określić dokładne reguły, których potrzebujesz po kroku 4.5.

4.3 Importuj pliki konfiguracyjne 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 Zmodyfikuj /usr/local/nginx/conf/modsecurity.confplik:

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

4.5 Dodaj pliki OWASP ModSecurity CRS (zestaw podstawowych reguł):

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

Krok 5: Przetestuj ModSecurity

Uruchom Nginx:

systemctl start nginx.service

Otwórz port 80, aby umożliwić dostęp z zewnątrz:

a) W CentOS 7:

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

b) W Debianie 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) W systemie Ubuntu 16.04:

ufw allow OpenSSH
ufw allow 80
ufw default deny
ufw enable    

Skieruj swoją przeglądarkę internetową na:

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

Służy grepdo pobierania komunikatów o błędach w następujący sposób:

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

Dane wyjściowe powinny zawierać kilka komunikatów o błędach podobnych do:

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

Otóż ​​to. Jak widać, moduł ModSecurity pomyślnie zarejestrował ten atak zgodnie ze swoją domyślną polityką działania. Jeśli chcesz wprowadzić więcej ustawień niestandardowych, dokładnie przejrzyj i edytuj /usr/local/nginx/conf/modsecurity.conforaz /usr/local/nginx/conf/owasp-modsecurity-crs/crs-setup.confpliki.

Zostaw komentarz

Funkcjonalności warstw architektury referencyjnej Big Data

Funkcjonalności warstw architektury referencyjnej Big Data

Przeczytaj blog, aby w najprostszy sposób poznać różne warstwy w architekturze Big Data i ich funkcjonalności.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Chcesz zobaczyć rewolucyjne wynalazki Google i jak te wynalazki zmieniły życie każdego człowieka dzisiaj? Następnie czytaj na blogu, aby zobaczyć wynalazki Google.

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Whatsapp w końcu uruchomił aplikację Desktop dla użytkowników komputerów Mac i Windows. Teraz możesz łatwo uzyskać dostęp do Whatsapp z systemu Windows lub Mac. Dostępne dla Windows 8+ i Mac OS 10.9+

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

Energia jądrowa jest zawsze pogardzana, nigdy jej nie szanujemy z powodu przeszłych wydarzeń, ale nie zawsze jest zła. Przeczytaj post, aby dowiedzieć się więcej na ten temat.

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Koncepcja autonomicznych samochodów, które wyjadą na drogi za pomocą sztucznej inteligencji, to marzenie, które mamy już od jakiegoś czasu. Ale pomimo kilku obietnic nigdzie ich nie widać. Przeczytaj ten blog, aby dowiedzieć się więcej…

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

Sztuczna inteligencja nie jest dla ludzi nową nazwą. Ponieważ sztuczna inteligencja jest włączona do każdego strumienia, jednym z nich jest opracowywanie narzędzi zwiększających ludzką wydajność i dokładność. Skorzystaj z tych niesamowitych narzędzi uczenia maszynowego i uprość swoje codzienne zadania.

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Wzrasta liczba ataków ransomware, ale czy sztuczna inteligencja może pomóc w radzeniu sobie z najnowszym wirusem komputerowym? Czy AI jest odpowiedzią? Przeczytaj tutaj, wiedz, że sztuczna inteligencja jest zmorą lub zgubą

Wgląd w 26 technik analizy Big Data: część 2

Wgląd w 26 technik analizy Big Data: część 2

Zawsze potrzebujemy Big Data Analytics do efektywnego zarządzania danymi. W tym artykule omówiliśmy kilka technik analizy Big Data. Sprawdź ten artykuł.

Ataki DDOS: krótki przegląd

Ataki DDOS: krótki przegląd

Czy jesteś również ofiarą ataków DDOS i nie masz pewności co do metod zapobiegania? Przeczytaj ten artykuł, aby rozwiązać swoje pytania.