"Enter"a basıp içeriğe geçin

Dinamik Modüllerle NGINX’e İşlevsellik Ekleme | ModSecurity Kurulum

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

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.