0

Any one tried to implement iredmail with mod security? My English is also not so good, I hope you understand my reasons. Thanks for your help in advance.

I have installed iredmail + web presentation on nginx but i have problem with modsec rules. I used apache2 + mod sec before. I implemented custom rules like rbl or drop .php or .env request, for example. You can find my examples below, wich i used by apache2. Rbl rule

SecRule REMOTE_ADDR "@rbl sbl-xbl.spamhaus.org" "phase:1,id:171,t:none,pass,log,auditlog,msg:'RBL Match for SPAM Source',tag:'AUTOMATION/MALICIOUS',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.automation_score=+%{tx.warning_anomaly_score},setvar:tx.an>
 setvar:tx.%{rule.id}-AUTOMATION/MALICIOUS-%{matched_var_name}=%{matched_var},setvar:ip.spammer=1,expirevar:ip.spammer=86400,setvar:ip.previous_rbl_check=1,expirevar:ip.previous_rbl_check=86400,skipAfter:END_RBL_CHECK"

.php rule

SecRule REQUEST_LINE "@contains .php" "phase:1,id:150,drop,status:444,log,t:none,t:urlDecode,t:lowercase,t:normalizePath,msg:'Request contains .php file'"

.env rule

SecRule REQUEST_LINE "@contains .env" "phase:1,id:155,drop,status:444,log,t:none,t:urlDecode,t:lowercase,t:normalizePath,msg:'Request contains .env file'"

It is worked very good on apache, spamers kiss ..... :) but it is drop incorrectly on iredmail with nginx.

Rbl not drop at all. I tried RBL from projecthonejpot but it is the same. For example, if i try www.example.com/index.php so it dropping good but some request from spammers kill me. I don't know, from which it come but the request was killed on apache.

Below is access.log.

184.168.103.230 - - [08/Feb/2022:17:33:28 +0100] "GET /wp-login.php HTTP/1.1" 301 162 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"
184.168.103.230 - - [08/Feb/2022:17:33:31 +0100] "GET /wp-login.php HTTP/1.1" 404 47 "http://example.com/wp-login.php" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"

Below is error.log

2022/02/08 17:33:31 [error] 1036473#1036473: *232 FastCGI sent in stderr: "Primary script unknown" while reading response header 
from upstream, client: 184.168.103.230, server: domain.com, request: "GET /wp-login.php HTTP/1.1", upstream: 
"fastcgi://127.0.0.1:9999", host: "example.com", referrer: "http://example.com/wp-login.php"

Mod sec do not drop it by rule .php but if it was dropped the error log looks like below.

2022/02/08 18:28:29 [error] 1036473#1036473: *238 [client 173.212.214.140] ModSecurity: Access denied with code 444 (phase 1). 
Matched "Operator `Contains' with parameter `.php' against variable `REQUEST_LINE' (Value: `GET /wp-login.php HTTP/1.1' ) 
[file "/etc/nginx/modsecurity/modsecurity.conf"] [line "279"] [id "150"] [rev ""] [msg "Request contains .php file"] [data ""] 
[severity "0"] [ver ""] [maturity "0"] [accuracy "0"] [hostname "xxxx"] [uri "/wp-login.php"] [unique_id "1644341309"] 
[ref "o13,4v0,26t:urlDecode,t:lowercase,t:normalizePath"], client: 173.212.214.140, server: example.com, request: "GET /wp-login.php HTTP/1.1", 
host: "example.com", referrer: "http://example.com/wp-login.php"

On this situation, it was some time dropped but some times not. For example it was dropped all time on apache. Below is my nginx config. 00-default.conf:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    listen server ip:80 default_server;
    listen [server ip6::1]:80 default_server;
    server_name _;

    return 444;

}

server {
    # Listen on ipv4
    listen server ip:80;
    listen [server ip::6]:80;
    server_name mail.example.com;

    root /var/www/html;
    index index.html robots.txt;

    # Redirect all insecure http:// requests to https://
    return 301 https://$host$request_uri;

    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;

    location / {
        try_files $uri $uri/ =404;
    }

    #Remove Unwanted HTTP Methods
    if ($request_method !~ ^(GET|POST)$) {
        return 444;
    }
}

00-default-ssl.conf:

server {
    listen 443 default_server;
    listen [::]:443 default_server;
    listen 1server ip:443 default_server;
    listen [server ip::6]:443 default_server;
    server_name _;

    ssl_certificate /etc/letsencrypt/live/mail.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mail.example.com/privkey.pem; # managed by Certbot

    return 444;

}

server {
    listen server ip:443 ssl http2;
    listen [server ip::6]:443 ssl http2;
    server_name mail.example.com;

    root /var/www/html;
    index index.php index.html;

    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;

    include /etc/nginx/templates/misc.tmpl;
    include /etc/nginx/templates/ssl.tmpl;
    include /etc/nginx/templates/iredadmin.tmpl;
    include /etc/nginx/templates/roundcube.tmpl;
    include /etc/nginx/templates/php-catchall.tmpl;

    #Remove Unwanted HTTP Methods
    if ($request_method !~ ^(GET|POST)$) {
        return 444;
    }

    location / {
        try_files $uri $uri/ =404;
    }
}

mydomaine.conf:

server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

      location / {
          return 444;
      }

}


server {
    listen server ip:443 ssl http2;
    listen [server ip::6]:443 ssl http2;
    root /var/www/html/example.com;
    index index.html robots.txt;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    include /etc/nginx/templates/misc.tmpl;
    include /etc/nginx/templates/php-catchall.tmpl;
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;

    location / {
        try_files $uri $uri/ =404;
    }

        error_page 404 /404/index.html;

}

Maybe i do not understand iredmail conception, im not a redmail admin. Iredmail is good solutions but some time it use not profi :) as a result it is not drop request from spamers.

Thanks for your helps.

WhoAmI
  • 1

0 Answers0