มีใครพยายามใช้ iredmail ด้วย mod security หรือไม่?
ภาษาอังกฤษของฉันยังไม่ค่อยดีนัก ฉันหวังว่าคุณจะเข้าใจเหตุผลของฉัน ขอบคุณสำหรับความช่วยเหลือของคุณล่วงหน้า
ฉันติดตั้ง iredmail + การนำเสนอเว็บบน nginx แล้ว แต่ฉันมีปัญหากับกฎ modsec
ฉันใช้ apache2 + mod sec มาก่อน ฉันใช้กฎที่กำหนดเองเช่นคำขอ rbl หรือ drop .php หรือ .env เป็นต้น
คุณสามารถดูตัวอย่างของฉันด้านล่าง ซึ่งฉันใช้โดย apache2
กฎ Rbl
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', ความรุนแรง:'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,ข้ามหลัง:END_RBL_CHECK"
กฎ .php
SecRule REQUEST_LINE "@contains .php" "phase:1,id:150,drop,status:444,log,t:none,t:urlDecode,t:lowercase,t:normalizePath,msg:'คำขอมีไฟล์ .php' "
กฎ .env
SecRule REQUEST_LINE "@contains .env" "phase:1,id:155,drop,status:444,log,t:none,t:urlDecode,t:lowercase,t:normalizePath,msg:'คำขอมีไฟล์ .env' "
มันทำงานได้ดีมากกับ apache, spamers kiss ..... :) แต่มันวางไม่ถูกต้องบน iredmail ด้วย nginx
Rbl ไม่ลดลงเลย ฉันลอง RBL จาก projecthonejpot แล้ว แต่ก็เหมือนเดิม
ตัวอย่างเช่น ถ้าฉันพยายาม www.example.com/index.php ดังนั้นมันจึงลดลงได้ดี แต่คำขอบางอย่างจากผู้ส่งสแปมก็ฆ่าฉัน ฉันไม่รู้ว่ามันมาจากไหน แต่คำขอถูกฆ่าบน apache
ด้านล่างคือ 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"
ด้านล่างคือ error.log
2022/02/08 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 แต่ถ้าถูกทิ้ง บันทึกข้อผิดพลาดจะมีลักษณะดังนี้
2022/02/08 18:28:29 [ข้อผิดพลาด] 1036473#1036473: *238 [ไคลเอนต์ 173.212.214.140] ModSecurity: การเข้าถึงถูกปฏิเสธด้วยรหัส 444 (ระยะที่ 1)
จับคู่ "ตัวดำเนินการ `ประกอบด้วย' กับพารามิเตอร์ `.php' กับตัวแปร `REQUEST_LINE' (ค่า: `GET /wp-login.php HTTP/1.1' )
[ไฟล์ "/etc/nginx/modsecurity/modsecurity.conf"] [บรรทัด "279"] [id "150"] [rev ""] [msg "คำขอมีไฟล์ .php"] [ข้อมูล""]
[ความรุนแรง "0"] [เวอร์ชัน ""] [ครบกำหนด "0"] [ความแม่นยำ "0"] [ชื่อโฮสต์ "xxxx"] [uri "/wp-login.php"] [unique_id "1644341309"]
[อ้างอิง "o13,4v0,26t:urlDecode,t:lowercase,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;
server_name 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;
}
#Remove วิธี HTTP ที่ไม่ต้องการ
ถ้า ($request_method !~ ^(GET|POST)$) {
กลับ 444;
}
}
00-default-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;
server_name 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;
#Remove วิธี HTTP ที่ไม่ต้องการ
ถ้า ($request_method !~ ^(GET|POST)$) {
กลับ 444;
}
ที่ตั้ง / {
try_files $uri $uri/ =404;
}
}
mydomain.conf:
เซิร์ฟเวอร์ {
ถ้า ($host = www.example.com) {
ส่งคืน 301 https://$host$request_uri;
} # จัดการโดย Certbot
ถ้า ($host = example.com) {
ส่งคืน 301 https://$host$request_uri;
} # จัดการโดย Certbot
ฟัง 80;
ฟัง [::]:80;
server_name example.com www.example.com;
ที่ตั้ง / {
กลับ 444;
}
}
เซิร์ฟเวอร์ {
ฟังเซิร์ฟเวอร์ ip:443 ssl http2;
ฟัง [เซิร์ฟเวอร์ ip::6]:443 ssl http2;
รูท /var/www/html/example.com;
ดัชนี index.html robots.txt;
server_name 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;
}
error_page 404 /404/index.html;
}
บางทีฉันอาจไม่เข้าใจแนวคิดของ iredmail ฉันไม่ใช่ผู้ดูแลระบบ redmail Iredmail เป็นวิธีแก้ปัญหาที่ดี แต่บางครั้งก็ใช้ไม่ใช่ profi :) ดังนั้นจึงไม่ส่งคำขอจากผู้ส่งสแปม
ขอบคุณสำหรับความช่วยเหลือของคุณ