Last updated on 10 Eylül 2020
Üçüncü parti modülleri NGINX ile kullanmak mümkündür ve insanların en yaygın kullandığı modlardan biri ModSecurity’dir. Bu modülü yazımızın ilerleyen bölümlerinde kullanacağız ve üçüncü taraf bir modülü nasıl kurabileceğimize bakmak için mükemmel bir adaydır.
Daha yeni ModSecurity yapılarında bir yapılandırma hatasını önlemek için dinamik modülü oluşturduktan sonra aşağıdaki komutu çalıştırmanız gerekir:
[root] $ cp /opt/ModSecurity/unicode.mapping /etc/nginx/modsecurity/unicode.mapping
Kaynaklarımız,
LibModSecurity’i derleme
ModSecurity için dinamik NGINX modülünü oluşturmadan önce, ModSecurity’nin V3’ünü (libModSecurity olarak da bilinir) oluşturmamız gerekir. Bu paketi derleyeceğimiz için, git ve diğer bazı geliştirici araçlarını yükleyerek kaynak kodlarını almamıza izin vereceğiz.
Ön koşulları yükleyin:
[root] $ yum groupinstall 'Development tools' [root] $ yum install -y \ geoip-devel \ gperftools-devel \ libcurl-devel \ libxml2-devel \ libxslt-devel \ libgd-devel \ lmdb-devel \ openssl-devel \ pcre-devel \ perl-ExtUtils-Embed \ yajl-devel \ zlib-devel
ModSecurity’i klonlayın, derleyin ve kurun (bu uzun zaman alacaktır):
[root] $ cd /opt [root] $ git clone --depth 1 -b v3/master https://github.com/SpiderLabs/ModSecurity [root] $ cd ModSecurity [root] $ git submodule init [root] $ git submodule update [root] $ ./build.sh [root] $ ./configure [root] $ make [root] $ make install
Uyumlu Dinamik Modül Oluşturma
Yüklememiz gereken çekirdek kitaplığa sahip olduğumuza göre, kurulu NGINX sürümümüz için NGINX kaynak kodunu indirebilir ve ModSecurity-nginx projesini kullanarak dinamik bir modül oluşturmak için kullanabiliriz. Bu iki projenin kodunu alalım:
Download ModSecurity-nginx
:
[root] $ cd /opt [root] $ git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
NGINX kaynağını indirin ve paketini açın: kendi nginx versiyonunuzu tespit ettikten sonra onu indirip o paketler üzerinden işlem yapmanız gerekmektedir. daha yüksek bir versiyon kullanıp, burada yazan versiyon ile ./configure ve buna benzer işlem yaparsanız sorun yaşarsınız bir sonraki adımları geçemezsiniz.
[root] $ nginx -v nginx version: nginx/1.12.2 [root] $ wget http://nginx.org/download/nginx-1.12.2.tar.gz [root] $ tar zxvf nginx-1.12.2.tar.gz
Dinamik modülü yapılandırın ve oluşturun:
[root] $ cd nginx-1.12.2 [root] $ ./configure --with-compat --add-dynamic-module=../ModSecurity-nginx [root] $ make modules [root] $ cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules/
ModSecurity için dinamik modülü başarıyla oluşturduk (beklenenden daha zor) ve onu yükleyebilmemiz için NGINX konfigürasyonumuzun geri kalanına bir dizine kopyaladık.
ModSecurity Modül
Önceki derslerde, load_module’un dinamik modülleri yüklemek için kullanıldığını öğrendik. Yeni modülümüzü /etc/nginx/nginx.conf dosyasının en üstünde kullanalım.
/etc/nginx/nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; # Load ModSecurity dynamic module load_module /etc/nginx/modules/ngx_http_modsecurity_module.so; event worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
ModSecurity’i Önerilen Kurallarla Etkinleştirme
Modülü yükledik ama hiç kullanmadık. Kullanmadan önce bir kural dosyası oluşturmamız gerekecek. Neyse ki, indirdiğimiz ModSecurity kaynak kodu önerilen bir konfigürasyon içeriyor. NGINX’imize yerel yeni bir dizin oluşturalım ve bu yapılandırmayı kopyalayalım:
[root] $ mkdir /etc/nginx/modsecurity [root] $ cp /opt/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsecurity/modsecurity.conf [root] $ cp /opt/ModSecurity/unicode.mapping /etc/nginx/modsecurity/unicode.mapping
Bu varsayılan yapılandırmada bir satırı değiştireceğiz, denetim günlüğünün /var/log/nginx’e gitmesini istiyoruz, böylece SELinux ile sorun yaşamayalım.
/etc/nginx/modsecurity/modsecurity.conf – > güncel hali
SecAuditLog /var/log/nginx/modsec_audit.log bu satırı /etc/nginx/modsecurity/modsecurity.conf bu şekilde güncelleyelim.
Son olarak, bunu birincil sunucu bloğumuzda (HTTPS biri) etkinleştirelim:
/etc/nginx/conf.d/default.conf
server { listen 80 default_server; server_name _; return 301 https://$host$request_uri; } server { listen 443 ssl default_server; server_name _; root /usr/share/nginx/html; modsecurity on; modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf; ssl_certificate /etc/nginx/ssl/public.pem; ssl_certificate_key /etc/nginx/ssl/private.key; rewrite ^(/.*)\.html(\?.*)?$ $1$2 redirect; rewrite ^/(.*)/$ /$1 redirect; location / { try_files $uri/index.html $uri.html $uri/ $uri =404; } location = /admin { auth_basic "Login Required"; auth_basic_user_file /etc/nginx/.htpasswd; try_files $uri/index.html $uri.html $uri/ $uri =404; } error_page 404 /404.html; error_page 500 501 502 503 504 /50x.html; }
Son olarak, nginx -t kullanarak yapılandırmamızın geçerli olduğundan emin olalım ve sonra servisi yeniden başlatalım.
[root] $ nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root] $ systemctl reload nginx