CentOS 7, Debian 8 ve Ubuntu 16.04 Üzerinde Nginx için ModSecurity Nasıl Kurulur

ModSecurity, çeşitli web uygulamalarındaki potansiyel güvenlik açıklarını hedefleyen çeşitli siber saldırılara karşı Apache, Nginx ve IIS'yi korumak için harika bir açık kaynaklı web uygulaması güvenlik duvarı (WAF) modülüdür

Bu makalede, Centgin 7, Debian 8 ve Ubuntu 16.04 üzerine Nginx için ModSecurity'yi kuracağız ve yapılandıracağız.

Ön şartlar

  • Bir yukarı güncel CentOS 7, Debian 8 veya Ubuntu 16.04 64 bit kurulumu.
  • Olarak giriş yapılıyor root.

1. Adım: Sistemi güncelleyin

Ardından bu kılavuzda , sunucunuzun Kernel ve en son sürüme Paketleri güncelleyin.

2. Adım: Bağımlılıkları yükleyin

Nginx ve ModSecurity'yi başarıyla derleyebilmeniz için önce aşağıdaki gibi birkaç yazılım paketi yüklemeniz gerekir.

a) CentOS 7'de:

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 veya Ubuntu 16.04'te:

apt-get install -y git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-dev libxml2-dev libcurl4-openssl-dev automake pkgconf

Adım 3: ModSecurity'yi Derleyin

Nginx ana dalı için ModSecurity'de bildirilen çeşitli istikrarsızlıklar nedeniyle, şimdilik, nginx_refactoringşubenin en son sürümünü mümkün olduğunca kullanmanız resmi olarak önerilir .

nginx_refactoringNginx için ModSecurity şubesini indirin :

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

ModSecurity'yi Derleyin:

a) CentOS 7'de:

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

Not: sedyukarıdaki iki komut, daha yeni otomatik yapım sürümlerini kullanırken uyarı mesajlarını önlemek için kullanılır.

b) Debian 8 veya Ubuntu 16.04'te:

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

4. Adım: Nginx'i derleyin

Nginx 1.10.3Yazma sırasındaki Nginx'in en son kararlı sürümünü indirin ve arşivden çıkarın :

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'de:

İlk olarak, Nginx için özel bir kullanıcı nginxve özel bir grup oluşturmanız gerekir nginx:

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

Ardından ModSecurity ve SSL modüllerini etkinleştirirken Nginx'i derleyin:

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

Varsayılan Nginx kullanıcısını değiştirin:

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

b) Debian 8 veya Ubuntu 16.04'te:

İlk olarak, mevcut kullanıcıyı www-datave mevcut grubu kullanmalısınız www-data.

Ardından ModSecurity ve SSL modüllerini etkinleştirirken Nginx'i derleyin:

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

Varsayılan Nginx kullanıcısını değiştirin:

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

Nginx başarıyla yüklendiğinde, ilgili dosyalar şu konumda bulunur:

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"

kurulumu aşağıdakilerle test edebilirsiniz:

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

Eğer hiçbir şey yanlış gitmezse, çıktı:

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

Size kolaylık sağlamak için, Nginx için bir systemd birim dosyası oluşturabilirsiniz:

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

İleride, Nginx'i aşağıdaki şekilde başlatabilir / durdurabilir / yeniden başlatabilirsiniz:

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

Adım 4: ModSecurity ve Nginx'i Yapılandırma

4.1 Nginx'i Yapılandırma:

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

Segment içinde aşağıdaki segmenti bulun http {}:

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

Aşağıdaki satırları location / {}segmente ekleyin :

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

Nihai sonuç şöyle olmalıdır:

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

Kaydet ve çık:

:wq!

Not: Yukarıdaki Nginx yapılandırması, Nginx'i ters proxy yerine web sunucusu olarak kullanmak için yalnızca örnek bir yapılandırmadır. Nginx'i ters proxy olarak kullanıyorsanız #, son iki satırdaki karakteri kaldırın ve bunlarda uygun değişiklikleri yapın.

4.2 Adında bir dosya oluşturun /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

Not: Yukarıdaki yapılandırma owasp-modsecurity-crs/rules/dizindeki tüm OWASP ModSecurity Temel Kurallarını uygulayacaktır . Yalnızca seçmeli kuralları uygulamak istiyorsanız, include owasp-modsecurity-crs/rules/*.confsatırı kaldırmalı ve adım 4.5'ten sonra tam olarak ihtiyacınız olan kuralları belirtmelisiniz.

4.3 ModSecurity yapılandırma dosyalarını içe aktarın:

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 /usr/local/nginx/conf/modsecurity.confDosyayı değiştirin :

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

4.5 OWASP ModSecurity CRS (Çekirdek Kural Seti) dosyaları ekleyin:

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. Adım: ModSecurity'yi test edin

Nginx'i başlat:

systemctl start nginx.service

Dışarıdan erişime izin vermek için 80 numaralı bağlantı noktasını açın:

a) CentOS 7'de:

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

b) Debian 8 hakkında:

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'te:

ufw allow OpenSSH
ufw allow 80
ufw default deny
ufw enable    

Web tarayıcınızı şu adrese yönlendirin:

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

grepHata mesajlarını aşağıdaki gibi getirmek için kullanın :

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

Çıktı, aşağıdakine benzer birkaç hata iletisi içermelidir:

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

Bu kadar. Gördüğünüz gibi, ModSecurity modülü bu saldırıyı varsayılan eylem ilkesine göre başarıyla kaydetmiştir. Daha fazla özel ayar yapmak istiyorsanız, lütfen /usr/local/nginx/conf/modsecurity.confve /usr/local/nginx/conf/owasp-modsecurity-crs/crs-setup.confdosyaları dikkatlice inceleyin ve düzenleyin .



Leave a Comment

CentOS 7de LibreNMS Kullanarak Cihazlarınızı İzleyin

CentOS 7de LibreNMS Kullanarak Cihazlarınızı İzleyin

CentOS 7 üzerinde LibreNMS kullanarak ağ cihazlarınızı etkili bir şekilde izleyin. Ağ izleme için gerekli adımları ve yapılandırmaları öğrenin.

Counter-Strike: Global Offensive Server Nasıl Kurulur?

Counter-Strike: Global Offensive Server Nasıl Kurulur?

Counter-Strike: Global Offensive sunucusu kurmak için gerekli adımlar. Gerekli araçlar ve yükleme süreci hakkında bilgi.

Ubuntu 16.04 LTS Üzerinde OpenNMS Kurulumu

Ubuntu 16.04 LTS Üzerinde OpenNMS Kurulumu

OpenNMS, çok sayıda cihazı izlemek ve yönetmek için kullanılabilen bir açık kaynak ağ yönetim platformudur. Ubuntu 16.04 LTS üzerinde OpenNMS kurulumu için tüm adımları keşfedin.

Ubuntu 16.04te LibreNMS Kullanarak Cihazlarınızı İzleyin

Ubuntu 16.04te LibreNMS Kullanarak Cihazlarınızı İzleyin

Farklı Bir Sistem mi Kullanıyorsunuz? LibreNMS tam özellikli bir açık kaynak ağ izleme sistemidir.

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Birçoğunuz Switch'in Mart 2017'de çıkacağını ve yeni özelliklerini biliyorsunuz. Bilmeyenler için, 'Switch'i 'olmazsa olmaz bir gadget' yapan özelliklerin bir listesini hazırladık.

Hala Teslim Edilmeyen Teknoloji Sözleri

Hala Teslim Edilmeyen Teknoloji Sözleri

Teknoloji devlerinin sözlerini yerine getirmesini mi bekliyorsunuz? teslim edilmeyenleri kontrol edin.

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Mimarisindeki farklı katmanları ve işlevlerini en basit şekilde öğrenmek için blogu okuyun.

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zekanın küçük ölçekli şirketler arasında nasıl popüler hale geldiğini ve onları büyütme ve rakiplerine üstünlük sağlama olasılıklarını nasıl artırdığını öğrenmek için bunu okuyun.

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA, son birkaç yılda kullanıcıların çözmesi oldukça zorlaştı. Gelecekte spam ve bot tespitinde etkili kalabilecek mi?