Кто-нибудь пробовал реализовать iredmail с модом безопасности?
Мой английский тоже не так хорош, надеюсь, вы понимаете мои причины. Заранее благодарны за Вашу помощь.
Я установил iredmail + веб-презентацию на nginx, но у меня проблема с правилами modsec.
Раньше я использовал apache2 + mod sec. Например, я реализовал пользовательские правила, такие как запрос rbl или drop .php или .env.
Ниже вы можете найти мои примеры, которые я использовал в apache2.
Правило руб.
SecRule REMOTE_ADDR "@rbl sbl-xbl.spamhaus.org" "фаза:1,id:171,t:none,pass,log,auditlog,msg:'RBL Match for SPAM Source',tag:'АВТОМАТИЗАЦИЯ/ВРЕДОНОСНЫЙ', серьезность: '2', setvar: 'tx.msg=%{rule.msg}', setvar:tx.automation_score=+%{tx.warning_anomaly_score}, setvar:tx.an>
setvar:tx.%{rule.id}-АВТОМАТИЗАЦИЯ/ВРЕДНО-%{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,пропуститьПосле:END_RBL_CHECK"
.php правило
SecRule REQUEST_LINE "@contains .php" "фаза: 1, идентификатор: 150, удаление, статус: 444, журнал, t: нет, t: urlDecode, t: нижний регистр, t: normalizePath, msg: "Запрос содержит файл .php" "
.env правило
SecRule REQUEST_LINE "@contains .env" "фаза: 1, идентификатор: 155, удаление, статус: 444, журнал, t: нет, t: urlDecode, t: нижний регистр, t: normalizePath, msg: "Запрос содержит файл .env" "
На апаче работает очень хорошо, спамеры целуются..... :) но на iredmail с nginx дропается некорректно.
Рубль вообще не падает. Я пробовал RBL от projecthonejpot, но это то же самое.
Например, если я попытаюсь www.example.com/index.php так что это хорошо, но некоторые запросы от спамеров меня убивают. Я не знаю, откуда он пришел, но запрос был убит на апаче.
Ниже приведен файл access.log.
184.168.103.230 - - [08/фев/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/фев/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"
Ниже приведен файл error.log.
08.02.2022 17:33:31 [ошибка] 1036473#1036473: *232 FastCGI отправлено в stderr: «Первичный скрипт неизвестен» при чтении заголовка ответа
из восходящего потока, клиент: 184.168.103.230, сервер: domain.com, запрос: "GET /wp-login.php HTTP/1.1", восходящий поток:
"fastcgi://127.0.0.1:9999", хост: "example.com", реферер: "http://example.com/wp-login.php"
Mod sec не удаляет его по правилу .php, но если он был удален, журнал ошибок выглядит следующим образом.
08.02.2022 18:28:29 [ошибка] 1036473#1036473: *238 [клиент 173.212.214.140] ModSecurity: доступ запрещен с кодом 444 (фаза 1).
Сопоставлен "Оператор `Contains' с параметром `.php' для переменной `REQUEST_LINE' (значение: `GET /wp-login.php HTTP/1.1')
[файл "/etc/nginx/modsecurity/modsecurity.conf"] [строка "279"] [id "150"] [версия ""] [msg "Запрос содержит файл .php"] [данные ""]
[серьезность "0"] [версия ""] [зрелость "0"] [точность "0"] [имя хоста "xxxx"] [uri "/wp-login.php"] [unique_id "1644341309"]
[ссылка "o13,4v0,26t:urlDecode,t:нижний регистр,t:normalizePath"], клиент: 173.212.214.140, сервер: example.com, запрос: "GET /wp-login.php HTTP/1.1",
хост: «example.com», реферер: «http://example.com/wp-login.php»
В этой ситуации это было некоторое время сброшено, но иногда нет. Например, он все время сбрасывался на apache.
Ниже мой конфиг nginx.
00-default.conf:
сервер {
слушать 80 default_server;
слушать [::]:80 default_server;
IP-адрес сервера прослушивания: 80 default_server;
слушать [сервер ip6::1]:80 default_server;
имя сервера _;
вернуть 444;
}
сервер {
# Слушаем по ipv4
IP-адрес сервера прослушивания: 80;
слушать [ip сервера::6]:80;
имя_сервера mail.example.com;
корень /var/www/html;
индекс index.html robots.txt;
# Перенаправляем все небезопасные http:// запросы на https://
вернуть 301 https://$host$request_uri;
модбезопасность включена;
modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;
место расположения / {
try_files $uri $uri/ =404;
}
#Удалить нежелательные методы HTTP
если ($request_method !~ ^(GET|POST)$) {
вернуть 444;
}
}
00-по умолчанию-ssl.conf:
сервер {
слушать 443 default_server;
слушать [::]:443 default_server;
слушать 1 сервер ip: 443 default_server;
слушать [IP-адрес сервера::6]:443 default_server;
имя сервера _;
ssl_certificate /etc/letsencrypt/live/mail.example.com/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/mail.example.com/privkey.pem; # под управлением Certbot
вернуть 444;
}
сервер {
IP-адрес сервера прослушивания: 443 ssl http2;
слушать [IP-адрес сервера::6]:443 ssl http2;
имя_сервера mail.example.com;
корень /var/www/html;
индекс index.php index.html;
модбезопасность включена;
modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;
включить /etc/nginx/templates/misc.tmpl;
включить /etc/nginx/templates/ssl.tmpl;
включить /etc/nginx/templates/iredadmin.tmpl;
включить /etc/nginx/templates/roundcube.tmpl;
включить /etc/nginx/templates/php-catchall.tmpl;
#Удалить нежелательные методы HTTP
если ($request_method !~ ^(GET|POST)$) {
вернуть 444;
}
место расположения / {
try_files $uri $uri/ =404;
}
}
мойдомен.conf:
сервер {
если ($host = www.example.com) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
если ($host = example.com) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
слушать 80;
слушать [::]:80;
имя_сервера example.com www.example.com;
место расположения / {
вернуть 444;
}
}
сервер {
IP-адрес сервера прослушивания: 443 ssl http2;
слушать [IP-адрес сервера::6]:443 ssl http2;
корень /var/www/html/example.com;
индекс index.html robots.txt;
имя_сервера example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
включить /etc/nginx/templates/misc.tmpl;
включить /etc/nginx/templates/php-catchall.tmpl;
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
модбезопасность включена;
modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;
место расположения / {
try_files $uri $uri/ =404;
}
страница_ошибки 404 /404/index.html;
}
Может быть, я не понимаю концепцию iredmail, я не админ redmail. Iredmail - хорошее решение, но какое-то время им пользовались не профи :) в результате это не дроп-запрос от спамеров.
Спасибо за вашу помощь.