banner
 .::*nix::. Qmail as a Mail Gateway - Phần 4 Go to original post Author: Hoàng Ngọc Diêu (conmale) - Translator:  - Entry Date: 24/02/2009 15:19:11
Qmail as a Mail Gateway - Phần 4

Chi tiết các hồ sơ cần điều chỉnh cho qmail cho vấn đề tối ưu hoá.

4.2 Danh mục các hồ sơ trong “qmail-control” cần thiết cho Qmail relay server:
Ngoại trừ bạn dùng Qmail để thiết lập một mail server hạng nặng và muốn xử dụng tối đa chức năng của mỗi chương trình trong Qmail suite, bạn sẽ hiếm khi phải xử dụng tới trọn bộ 28 hồ sơ ở trên. Với trường hợp Qmail là một relay server, bạn không cần quá một chục hồ sơ trong nhóm các hồ sơ thuộc “qmail-control”. Sau đây là danh sách các hồ sơ tôi dùng cho “qmail-control” và nội dụng của từng hồ sơ để giúp bạn hình dung dễ dàng hơn chức năng của từng hồ sơ:

4.2.1 Hồ sơ “me” thuộc qmail-send:
- Hồ sơ “me” là khởi điểm cho mọi hoạt động của Qmail, thiếu nó Qmail sẽ không chạy. Hồ sơ này được tạo ra từ bước 2.4.4 khi bạn chạy lệnh ./config để thiết lập hostname cho mail server của bạn. Hồ sơ này chỉ có một dòng chỉ định cho domain entry của mail relay server.

- Nội dung của hồ sơ này có dạng: mail.mydomain.com, trong đó: mail là hostname của mail relay server, mydomain.com là fully qualified domain name bạn có.

4.2.2 Hồ sơ “locals” thuộc qmail-send:
- Hồ sơ này dùng để chỉ định các địa chỉ e-mail được xem là “local” đối với mail relay server. Nếu không có entry nào trong “locals” thì qmail-send cho rằng chỉ có mỗi host trong “me” thuộc local. Trường hợp dùng Qmail như một mail relay server không cần “locals” nữa, nếu có, hồ sơ “locals” này có một dòng chỉ định y hệt như “me” vậy thôi.

4.2.3 Hồ sơ “concurincoming”(hay còn gọi là concurrencylocal) thuộc qmail-send:
- Hồ sơ này ấn định số lượng mail được chuyển giao cùng một lúc. Default có giá trị là 10, với giá trị này, Qmail đủ sức chuyển giao mail cho một server cỡ nhỏ đến cỡ trung. Nên tránh dùng giá trị quá nhỏ để đề phòng trường hợp bị “denial attack”. Tôi dùng giá trị là 20 cho một văn phòng cỡ 100 nhân viên (khoảng 140 e-mails tổng cộng, bao gồm các e-mail chung cho từng nhóm nhân viên).

4.2.4 Hồ sơ “defaultdomain” thuộc qmail-inject:
- Hồ sơ này dùng như một dạng bản mẫu, nếu vì một lý do gì đó mail client không dùng trọn bộ tên người dùng + tên domain như một e-mail thông thường ví dụ: me@mycom.com mà chỉ có tên người dùng là me thì “defaultdomain” được qmail dùng để “gắn” thêm cái đuôi tên domain trước khi nó gởi mail ra ngoài. Nếu qmail không tìm thấy “defaultdomain” nó sẽ tự động dùng entry trong hồ sơ “me” ở trên. Hồ sơ này không quá cần thiết, sự hiện diện của nó thường để loại trừ trường hợp mail client không gởi “sender” đúng và dùng để giao chuyển giữa các mail account trong cùng mail relay server.

- Hồ sơ này chỉ đơn giản có 1 entry là domain name của bạn, ví dụ: mycompany.com

4.2.5 Hồ sơ “queuelifetime” thuộc hồ sơ qmail-send:
- Hồ sơ này dùng để chỉ định thời gian (tính theo đơn vị giây) mail được giữ trong mail queue (vì lý do gì đó không chuyển gởi được) trước khi bị xoá. Khi mail đợi trong queue đến hạn cuối của “queuelifetime”, qmail sẽ chuyển gởi mail đó lần cuối trước khi thực sự xoá nó khỏi mail queue (nếu mail này vẫn không thể chuyển giao được).

- Giá trị default của hồ sơ “queuelifetime” là 604800 giây (tương đương với 1 tuần lễ). Giá trị này tùy thuộc vào môi trường của bạn mà thiết lập cho thích hợp. Ví dụ, mail relay server của bạn chỉ phục vụ cho một số ít người và thuộc mạng “chậm” thì nên thiết kết giá trị của “queuelifetime” cao hơn một tí để mail có cơ hội được chuyển giao trong trường hợp mạng bi nghẽn (thật ra queuelifetime cho 1 tuần là rất lâu). Tôi chọn giá trị 172800 (khoảng 48 giờ) vì mail relay server trong trường hợp tôi thiết kế phục vụ cho khá nhiều người và đường dẫn khá tốt.

4.2.6 Hồ sơ “badmailfrom” thuộc qmail-smtpd:
- Hồ sơ này là một trong những hồ sơ tiện dụng của qmail, nó dùng để chứa các e-mail bạn không cho phép qmail server nhận vào (nó thuộc qmail-smtpd nên thuộc phần “nhận”). Dù phương pháp chống “bom thư” hay spam này không được linh động cho lắm nhưng nó là một trong những chức năng chứng tỏ sự quan tâm của ông Bernstein khi viết Qmail trong vấn đề chống spam.

- Hồ sơ này chứa các e-mail hoặc trọn bộ domain bạn không muốn nhận bất cứ tin tức gì, mỗi e-mail phải nằm trên một dòng. Ví dụ:
spamboy@spamhouse.com (không nhận mail từ 1 địa chỉ này)
@spamhouse.com (không nhận mail từ trọn bộ domain này).

- Các phương pháp phòng chống “bom thư” linh động hơn sẽ được đi sâu hơn trong những phần tới.

4.2.7 Hồ sơ “rpcthosts” thuộc qmail-smtpd:
- Hồ sơ rcpthosts là một hồ sơ hết sức quan trọng đối với qmail-smtpd, nhất là cho một mail relay server. Hồ sơ này cung cấp dữ kiện cho qmail-smtpd, daemon này thay mặt các hosts và domains nào muốn nhận chuyển mail. Ví dụ bạn có 2 mail server trong LAN nội bộ có tên là domain1.com và domain2.com, hồ sơ rcpthosts phải có dữ kiện của 2 mail server này, nếu không, mail từ bên ngoài vào 2 server này sẽ bị qmail-smtpd từ chối chuyển nhận vào bên trong. Nên nhớ phải có ít nhất là một dữ kiện cho chính mail relay server không thì sẽ không có mail nào được vào (ngay cả cho chính mail relay server).

- Hồ sơ rcpthosts chứa các dữ kiện theo mặc định mỗi dòng một host/domain. Hồ sơ này có cấu trúc tương tự như sau:
mail.mydomain.com (mail là hostname của mail relay server và domain.com là fully qualified domain name. Ðây chính là dữ kiện thiết yếu và đầu tiên cho mail relay server).

exchange1.mydomain.com (exchange1 là hostname của MS exchange thuộc LAN nội bộ. Tất nhiên DNS của bạn (hoặc của ISP cung cấp cho bạn) phải có entry cho host exchange1 này và mail relay server phải biết được địa chỉ (bên trong) của host exchange1).

exchange2.mydomain.com (tương tự như exchange1 và nhiều mail server bên trong theo cấu trúc này nếu cần).

mydomain.net (giả sử bạn có thêm một domain name khác với đuôi .net và một trong những mail server thuộc LAN nội bộ đã thiết lập để nhận mail cho domain.net này, entry domain.net trong rcpthosts cần thiết để mail relay server biết domain.net được phép nhận mail từ bên ngoài thông qua mail relay server).

mail.myfriend.com (giả sử một người bạn có domain name là myfriend.com và anh ta bị trục trặc với mail server. Bạn có thể “tạm thời” giúp anh ta bằng cách cho phép mail relay server của bạn nhận các mail thuộc myfriend.com vào host mail để anh ta có thể dial in host mail này mà lấy mail (chẳng hạn). Kỹ thuật này còn có cái tên là “chuyển nhận có lựa chọn” (selective relay policy).

- Sự hiện diện của hồ sơ rpcthosts là một trong những đặc thù của qmail trong vấn đề phòng chống open-relay. Chỉ có những host/domain hiện diện trong rpcthosts được phép nhận mail từ mai relay server của bạn. Ðiều này có nghĩa, một người ở hostA (mang IP address xx.xx.xx.xx) có ý định dùng mail relay server của bạn để chuyển tới một mail server nào đó (có IP address zz.zz.zz.zz) ngoài giới hạn quy định của rpcthosts tuyệt đối không thể được. Phần “Thử nghiệm sau khi cài đặt” trong phần 6 sẽ đi xuyên qua một số bước kiểm tra cụ thể.

4.2.8 Hồ sơ “smtpgreeting” thuộc qmail-smtpd:
- Hồ sơ này trên mặt chức năng gần như không cần thiết nhưng trên mặt tâm lý nó mang ít nhiều tính chuyên nghiệp (professionalism) sự sắp xếp và hiện diện của một mail relay server trên Internet. Hồ sơ smtpgreeting không chứa gì ngoài một giòng thông điệp “chào mừng” những ai đến mail relay server này (bao gồm sự trao đổi giữa các mail relay servers và ngay cả các tay chuyên dùng telnet hoặc các loại dụng cụ thăm dò mail server lỗ hổng open-relay).

- Hồ sơ này tùy thuộc vào tinh thần của bạn mà hình thành một lời “chào mừng” đúng mức. Tôi đã từng thấy một số mail relay server có lời “chào mừng” khá thách thức chẳng hạn như: “Kiddies, this server is not your playground. Stay away or stick around for a challenge” (Tạm dịch: Mấy ông nhóc con, server này không phải là chỗ chơi của các ông. Tránh xa hay nhào vô mà thử thách). Dù cơ chế làm việc của qmail mang nặng tính bảo mật không có nghĩa là nó hoàn hảo và không cách gì phá được. Một thông điệp mang tính hoà nhã và nghiêm túc thường có tác dụng tốt đẹp hơn nhiều (bạn sẽ phải hối hận nếu lỡ buông lời thách thức trong thế giới bảo mật).

- Tôi giả định nên dùng một thông điệp ngắn gọn và rõ ràng như sau: “Welcome to company ABC mail server and have a nice time”. Xét cho cùng, bạn không muốn tạo nên phiền toái mà làm gì. Nếu một tay chuyên tìm open-relay thất vọng khi “đụng” phải mail server của bạn đã là một thành tựu; một thông điệp nhẹ nhàng sẽ giúp cho anh ta quyết định “để yên server” của bạn. Nên nhớ rằng, dù mail relay server của bạn không open-relay, những kẻ muốn phá vẫn có thể “flood” server của bạn được, tổn thất ở chỗ người dùng trong nội mạng không có cơ hội gởi và nhận mail trong khi mail relay server bị “flood”.

4.2.9 Hồ sơ “smtproutes” thuộc qmail-remote:
- Ðối với một mail server bình thường (qmail được thiết kế để trực tiếp nhận / gởi e-mail từ clients bên trong nội mạng và các mail server ngoại mạng), hồ sơ smtproutes không cần thiết. Tuy nhiên, để một qmail relay server làm việc, hồ sơ này không thể thiếu được. Hồ sơ này tương tự hồ sơ rcpthosts ở trên chỉ có thêm giá trị địa chỉ IP đi sau mỗi host (mail server trong nội mạng). Các IP của mail server trong nội mạng giúp mail relay server xác định được mail sẽ được chuyển về đâu và mỗi mail server nội mạng chịu trách nhiệm phân phát cho các clients theo đúng quy định. Ðây chính là cốt yếu khác biệt giữa một mail server bình thường và một mail relay server.

- Hồ sơ smtproutes có cấu trúc như sau: hostname.domain.com:[IP_ADDRESS]. Giả sử hai exchange mail servers trong nội mạng có tên là exchange1 (IP: 192.168.1.100) và exchange2 (IP: 192.168.1.200), dữ kiện được quy định trong smtproutes sẽ như sau:
exchange1.mydomain.com:[192.168.1.100]
exchange2.mydomain.com:[192.168.1.200]
mail.myfriend.com:[192.168.1.100] (dùng exchange1 để “nhận dùm” mail cho người bạn, tất nhiên exchange1 đã được thiết kế để tiếp nhận mail cho domain myfriend.com).

4.3 Mail server trong nội mạng (MS Exchange)
- Tôi chọn MS Exchange như một mail server nội mạng không phải vì khả năng chuyên biệt của MS Exchange mà vì tính phổ biến của nó trong môi trường văn phòng thường xử dụng MS Back Office. Cách điều chỉnh cho các loại mail server khác có những điểm tương tự như MS Exchange về phương diện mail đi ra / vào (thay vì đi vào trực tiếp từ mail server của ISP bạn dùng, MS Exchange hoặc mail server nào đó có thể đi vào từ Qmail mail relay server).

- Trong phần điều chỉnh Connections của MS Exchange, bạn chọn “Internetmail Service Properties”. Trong phần điều chỉnh này có một “tab” gọi là “Connection”, trong đó bạn có thể điều chỉnh hai dữ kiện để MS Exchange biết phải chuyển nhận mail từ Qmail mail relay server ở đâu:
Transfer mode chọn: “Inbound and Outbound”
Message delivery chọn: “Forward all messages to host” và IP của host chính là IP của mail relay server.

- Nếu Exchange server của bạn chịu trách nhiệm quản lý mail cho nhiều domain, bạn phải điều chỉnh “Reroute incoming SMTP mail” cho thích ứng trong “tab” Routing của “Internet Mai Properties. Những thiết lập này mang tính cụ thể cho từng loại mail server. Bạn nên tham khảo thêm tài liệu của mỗi loại mail server để đi sâu vào các chi tiết.
- Nguyên tắc làm việc trước và sau khi có mail relay server là:
* Các mail server thuộc nội mạng (hoặc DMZ) không còn truy cập trực tiếp đến mail server của ISP mà truy cập vào Qmail relay server.
* Cơ chế mail relay hoàn toàn do qmail server nắm giữ.
* Qmail relay server có thể được nằm trong DMZ hoặc nội mạng hoặc đằng sau một router miễn sao router + firewall có thể “foward” các thông tin từ bên ngoài vào mail relay server. Quyết định đặt để qmail relay server tùy thuộc vào cấu trúc của từng network.

Qmail as a Mail Gateway - Phần 4 (cuối)

Chi tiết nâng cao - vấn đề bom thư với qmail.
5. Ðiều chỉnh sau khi cài đặt

Trước đây, khi Internet còn giới hạn (chỉ phổ biến giữa các trường đại học và các nhóm nghiên cứu và rất ít người dùng bình thường), mail là một phương tiện tuyệt vời để liên lạc và trao đổi. Tính thương mại hoá hầu như chưa có cho đến khi loạt “SPAM” đầu tiên xuất hiện đã biến Internet mail trở nên một vấn đề gần như nan giải đối với các loạt mail “vô chủ” chuyên để quảng cáo.

Có hai trường hợp thường xảy ra trong vấn nạn “SPAM” đó là:
- Bị biến thành phương tiện để “SPAM” những nạn nhân khác nếu mail server không được điều chỉnh và kiểm soát đúng mức (bị relay).

- Bị “SPAM” (bom thư).

5.1 Chiến thuật relaying điện thư (để không biến mail server của mình trở thành phương tiện để “SPAM”
5.1.1 Tại sao cần relay?
Như đã đề cập đến trong phần 3.5 (Bộ quản trị SMTP Access Control), có những trường hợp bạn cần cho phép mail gateway của mình relay mail vì lý do nào đó (chuyển nhận mail dùng cho công ty bạn hoặc mail server của bạn dùng để relay mail cho nhiều domain khác nhau như một mail server của ISP). Nói một cách ngắn gọn, khả năng “mail relaying”của một mail server A là khả năng tiếp nhận mail từ host X và chuyển gởi mail này đến host Y hoặc những host nào đó trong chế độ định sẵn mà mail server phải đảm nhiệm.

5.1.2 Chuyện gì xảy ra nếu không relay?
Nếu mail gateway của bạn chỉ dành phục vụ cho một domain riêng của bạn thì vấn đề relay không còn cần thiết nữa và quyết định hoàn toàn không relay là cách an toàn nhất để ngăn ngừa trường hợp mail gateway của bạn bị biến thành một phương tiện để SPAM.

5.1.3 Cho phép relaying theo lựa chọn
Trong phần 3.5 đã đi sâu vào chi tiết sắp xếp cho phép relay một cách chọn lọc, một trong những variables cần phải chú tâm đến là: allow,RELAYCLIENT. Nên xem xét một cách kỹ lưỡng các giá trị “RELAYCLIENT” để nắm chắc bạn đã không cho phép một “client” nào đó được phép relay vì sơ ý.

5.1.4 Thử nghiệm relaying bằng tcprulescheck
Trong nhóm “ucspi-tcp” có một chương trình gọi là tcprulescheck cho phép bạn kiểm tra các “luật” relay trước khi ứng dụng Qmail như một mail relay server thực sự. tcprulescheck dùng 2 variables của môi trường để kiểm tra các “luật” relay, đó là: TCPREMOTEIP và TCPREMOTEHOST. Bạn có thể thay đổi các variables này cho quy trình kiểm tra.

Sau đây là một ví dụ đơn giản quy trình kiểm tra các “luật” relay bằng tcprulescheck. Giả sử chúng ta dùng ví dụ qmail-rules.txt từ phần 3.5.

Code:


127.:allow,RELAYCLIENT=””

192.168.1.:allow,RELAYCLIENT=””
10.10.10.50:allow,RELAYCLIENT=””
<a href="mailto:spamboy@spamhouse.com">spamboy@spamhouse.com</a>:deny
badhost.net:deny
.:deny



Chúng ta thử “cat” qmail-rules.txt và “pipe” nó xuyên qua chương trình tcprules để tạo ra hash của các rules thuộc “qmail-rules.txt” (nên nhớ smtpd daemon dùng hash của qmail-rules.txt, đó là hồ sơ tcp.smtp.cdb, nó không bao giờ dùng nguyên bản cleartext qmail-rules.txt):
# cat /etc/smtprules/qmail-rules.txt | tcprules /etc/tcp.smtp.cdb

Hash của các rules được chứa trong hồ sơ tcp.smtp.cdb và chúng ta sẽ dùng hồ sơ này để kiểm tra các “luật” relay.

a. Lệnh $ tcprulescheck /etc/tcp.smtp.cdb sẽ cho kết quả:
rule:
deny connection
Trường hợp ở trên tcprulescheck dùng giá trị mặc định (default) của “qmail-rules.txt” đó là .:deny. Bất cứ truy cập nào vào mail relay server của bạn, đầu tiên nó sẽ dùng giá trị mặc định để “deny” trước và sau đó dựa trên IP hoặc hostname của nơi gởi mail mà định đoạt “số phận” của mail này.

b. Thử lệnh trên một lần nữa trước khi chỉnh variable TCPREMOTEIP là 10.10.10.50 như đã cho phép trong “qmail-rules.txt” ở trên:
$ TCPREMOTEIP=10.10.10.50 ; export TCPREMOTEIP
$ tcprulescheck /etc/tcp.smtp.cdb sẽ cho kết quả:
rule: 10.10.10.50:
set environment variable RELAYCLIENT=
allow connection

Ở trên cho thấy qmail chấp nhận TCPREMOTEIP là 10.10.10.50 là vì IP này đã thuộc trong danh sách qmail-rules.txt và được thiết lập ở chế độ allow,RELAYCLIENT nên tcprulescheck trả lời: allow connection.

c. Thử lệnh trên với TCPREMOTEIP mang giá trị khác, giả sử như badhost.net có IP là 172.173.174.175 (được thiết lập ở chế độ deny trong qmail-rules.txt)
$ TCPREMOTEIP=172.173.174.175 ; export TCPREMOTEIP
$ tcprulescheck /etc/tcp.smtp.cdb sẽ cho kết quả:
rule: badhost.net:
deny connection

Ở trên cho thấy Qmail từ chối không nhận mail muốn được chuyển nhận đến server 172.173.174.175 (IP của badhost.com trong ví dụ này) vì địa chỉ này được ấn định là deny.

Cứ như vậy, bạn đi xuyên qua mỗi “rule” trong qmail-rules.txt để kiểm tra chức năng relay của các rules.

5.1.5 Thử nghiệm relaying bằng “telnet”
Phương pháp dùng “telnet” để truy cập vào một mail server ở port 25 (SMTP port) có lẽ là một phương pháp cổ điển và phổ biến nhất để kiểm tra tính năng “relay” của nó. Ðây cũng là một trong những phương pháp các tay chuyên tìm kiếm “open relay” để có thể SPAM, tất nhiên không bằng cách “telnet” từng mail server mà bằng cách “tự động hoá” qua một dạng scripting nào đó để có thể đi xuyên qua hàng loạt mail server trong một khoảng thời gian ngắn.

Ở đây tôi sẽ đưa ra hai ví dụ đơn giản để kiểm tra tính năng “relay” của mail server của bạn. Ðòi hỏi đơn giản chỉ cần có chương trình “telnet” trong máy. Tính năng “relay” dựa trên hồ sơ “rcpthosts” (trong phần 4.2.7) có các giá trị như sau:
mail.mydomain.com
exchange1.mydomain.com
exchange2.mydomain.com
mydomain.net
mail.myfriend.com

Khởi động telnet trên một command prompt (Windows hoặc *nix tùy chọn). Giả sử mail gateway server của tôi có địa chỉ là 192.168.1.200 với hostname là mail.mydomain.com chẳng hạn, tôi sẽ làm các bước như sau:

Code:


1   telnet 192.168.1.200 25

2 220 My company mail server - Welcome ESMTP
3 HELO
4 250 My company mail server – Welcome
5 MAIL FROM: <spamboy@spamhouse.com>
6 250 ok
7 RCPT TO: <reciepient@someonecompany.com>
8 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)



Dòng 1: Dùng telnet với các thông số là IP 192.168.1.200 và SMTP port 25.

Dòng 2: Nếu mail server của tôi đang hoạt động bình thường, tôi sẽ nhận được lời chào (bạn còn nhớ hồ sơ “smtpgreeting” trong phần 4.2.8? đây chính là lời chào lấy từ hồ sơ “smtpgreeting” này).

Dòng 3: Tôi thử lệnh HELO, một lệnh căn bản của SMTP.

Dòng 4: Mail server của tôi sẽ trả lời với thông điệp lấy từ “smtpgreeting”.

Dòng 5: Tôi “mạo danh” là spamboy@spamhouse.com qua lệnh MAIL FROM:

Dòng 6: Mail server trả lời 250 ok bởi vì tôi chưa cho mail server của tôi biết là người nhận sẽ là ai và người nhận thuộc domain nào.

Dòng 7: Tôi dùng lệnh RCPT TO: và cho mail server biết người nhận là reciepient thuộc domain someonecompany.com; một domain không hề có trong rcpthosts.

Dòng 8: Qmail sẽ từ chối ngay lập tức.

Hãy thử kiểm tra relaying bằng telnet dùng các giá trị người nhận thuộc domain có trong hồ sơ “rcpthosts”. Quy trình này tương tự như sau:

Code:


1    telnet 192.168.1.200 25

2 220 My company mail server - Welcome ESMTP
3 HELO
4 250 My company mail server – Welcome
5 MAIL FROM: <spamboy@spamhouse.com>
6 250 ok
7 RCPT TO: <someone@mydomain.net>
8 250 ok
9 DATA
10 354 go ahead
11 From: <a href="mailto:spamboy@spamhouse.com">spamboy@spamhouse.com</a>
12 To: <a href="mailto:someone@mydomain.net">someone@mydomain.net</a>
13 Subject: a relay test
14 This is only a test for open relay
15 .
16 250 ok 1041050865 qp 12150
17 QUIT
18 221 My company mail server – Welcome
19
20 Connection to host lost.



Dòng 1 đến dòng 6: tương tự như ví dụ ở trên

Dòng 7: Lệnh RCPT TO: gởi đến người nhận thuộc domain mydomain.net, domain này có trong danh sách rcpthosts

Dòng 8: Mail server tiếp nhận và trả lời với SMTP code 250. Sở dĩ mail server tiếp nhận trong trường hợp này là vì domain mydomain.net hiện diện trong rcpthosts

Dòng 9: Lệnh DATA để báo với mail server dự định gởi thông điệp

Dòng 10: Mail server tiếp nhận và trả lời với SMTP code 354

Dòng 11 đến dòng 13: Các “message header” From, To và Subject thông thường để mail client có thể hiển thị những thông tin này

Dòng 14: Nội dung của thông điệp. Nội dung này có thể trải ra thành nhiều dòng nếu cần

Dòng 15: Dấu chấm (.) để kết thúc thông điệp

Dòng 16: Mail server trả lời kết thúc một “xuất” gởi thông điệp

Dòng 17: Lệnh QUIT dùng để dừng truy cập đến mail server bằng telnet

Dòng 18: Mail server trả lời với SMTP code 221, ngưng truy cập vào mail server thành công

Dòng 19 và dòng 20: Dòng trống trên console và thông điệp telnet báo không còn truy cập đến mail server nữa.

Ở trên bạn thấy người gởi “spamboy@spamhouse.com” vẫn có thể gởi mail đến “someone@mydomain.net” vì domain mydomain.net hiện diện trong hồ sơ “rpcthost”. Nếu trong hồ sơ “qmail-rules.txt” có dữ kiện dùng để “deny” người gởi này, chắc chắn mail ở trên không thể đi vào mail server của bạn được. Ví dụ trên một phần nào minh hoạ quan hệ giữa “qmail-rules.txt” và “rcpthosts” trên phương diện chống relay và chống spam.

Qua hai phần thử nghiệm 5.1.4 và 5.1.5 chúng ta có thể rút tỉa được một số điểm quan trọng như sau:

- Hồ sơ “qmail-rules.txt” dùng để xác định các host được phép relay và được phép dùng mail gateway để chuyển mail. Nó còn có trách nhiệm giúp Qmail quyết định mail đến và đi từ các host nào sẽ có số phận ra sao. Ðịnh nghĩa ÐẾN và ÐI ở đây có nghĩa là mail đi từ bên ngoài domain của bạn hoặc bên ngoài những domain bạn cho phép relay. Ngoài hồ sơ “badmailfrom” (xem lại trong phần 4.2.6), “qmail-rules.txt” là nơi để xác định những domains, hosts và các e-mail bạn không muốn tiếp nhận (qua phương thức :deny).

- Hồ sơ “rpcthost” dùng để xác định các domain nào được Qmail relay server giao chuyển mail. Ðiều này có nghĩa, Qmail dựa trên những dữ liệu của “rpcthosts” để tiếp nhận mail từ một nơi nào đó đến một mail server nào mà nó đã chịu trách nhiệm relay.

5.2 Chiến thuật chống bom thư với Qmail
Các bước 5.14 và 5.1.5 ở trên dùng để kiểm tra lại những lỗ hổng “relay” trên bình diện mail gateway được dùng để relay (hoặc mail gateway được làm phương tiện để spam các hòm thư). Hồ sơ “qmail-rules.txt” có thể dùng để quy định những e-mail, domains hoặc một chuỗi địa chỉ bạn không muốn nhận mail. Ðây là có thể là một cách chống bom thư nhưng thiếu tính “tự động hoá” vì bạn phải thường xuyên theo dõi, cập nhật các dữ kiện trong hồ sơ này.

Ðể nâng cao khả năng chống bom mail với tính “tự động hoá”, trong phần này chúng ta bàn về vấn đề dùng các RBL (realtime black list) database phối hợp với “qmail-rules.txt” để chống bom thư một cách hữu hiệu hơn.

Trong phần 3.4.2 trước đây, chúng ta nói đến chương trình “tcpserver” được sử dụng trong script “run” cho qmail-smtpd. Hãy xem lại đoạn script chạy “tcpserver” của phần 3.4.2:

Code:


#!/bin/sh

# concurincoming is not standard qmail control file
# it is created manually to specify the allowed concurrent incoming messages
#
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurincoming`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" ]; then
echo QMAILDUID, NOFILESGID, or MAXSMTPD is not set in
echo /var/qmail/supervise/qmail-smtpd/run
echo “Have you set qmaild UID & qmaild GID yet?”
exit 1
fi
exec /usr/local/bin/softlimit -m 6291456 \
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

Ở trên tcpserver chỉ dùng “tcp.smtp.cdb”, hồ sơ này được “hash” từ “qmail-rules.txt” để chống relay và bom thư theo dạng đơn giản. Cũng với cơ chế này, chúng ta có thể dùng “rblsmtpd” cùng với “tcpserver” để báo cho qmail server biết nó có trách nhiệm phải kiểm tra các mail đi xuyên qua mail gateway có thuộc dạng “SPAM” trước khi được chấp nhận. Phương thức kiểm tra bằng cách đối chiếu dữ kiện ở một trong những RBL servers. Có một số RBL database miễn phí trên internet. Có hai RBL cá nhân tôi dùng là: ordb.org và osirusoft.com (bạn có thể đọc thêm một số tin tức về RBL từ hai site này).

Cách dùng rblsmtpd trong script run của “qmail-smtpd” đơn giản như sau:

exec /usr/local/bin/softlimit -m 6291456 \
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd -r relays.ordb.org -r relays.osirusoft.com /var/qmail/bin/qmail-smtpd >> /var/log/qmail/rblsmtpd.log 2>&1



Chương trình rblsmtpd ở trên dùng hai tham số “relays.ordb.org” và “relays.osirusoft.com” chính là hai RBL database mà qmail phải đối chiếu mỗi khi nhận mail vào. Nếu Qmail nhận được dữ kiện từ một trong hai RBL database trên cho biết mail nào đó thuộc dạng “SPAM”, nó sẽ không tiếp nhận. Bạn có thể thêm các tham số cho rblsmtpd tùy thích.

Có lẽ bạn sẽ tự hỏi: vậy cứ mỗi lần mail đi vào đều phải được kiểm tra từ RBL thì chắc phải chậm lắm? Ðây là câu hỏi đã được đặt ra nhiều lần. Cá nhân tôi không thấy mức độ hoạt động của Qmail giảm sút khi đi qua giai đoạn kiểm tra này vì thật sự đây chỉ là một quy trình đối chiếu đơn giản. Nói cho cùng, dẫu có chậm hơn một tí vẫn còn nhanh hơn thời gian bạn phải ngồi xoá những bom thư bằng tay.

Một điểm cần lưu ý khi dùng các RBL database là nên theo dõi sự hiện diện của các RBL này. Lý do, các RBL này thường hoạt động theo tính thiện nguyện trên căn bản không lợi nhuận hoặc rất ít lợi nhuận nên tính trường tồn của chúng có phần bấp bênh. Nếu một trong những RBL bạn đang dùng không còn tồn tại thì nên cập nhật run script của “qmai-smtpd” nếu muốn duy trì nhiệm vụ kiểm tra SPAM của rblsmtpd. Tất nhiên bạn cũng có thể dùng RBL thương mại (phải trả tiền để dùng RBL database). Ðể cho tiện theo dõi, đây là danh sách cách RBL dabase cho chính Dan Bernstein, người viết Qmail và các phần mềm ứng dụng cho Qmail: http://cr.yp.to/ucspi-tcp/rblsmtpd.html

Hy vọng bạn sẽ hình thành một mail relay server bằng Qmail một cách hữu hiệu và tiện ích.

(kết thúc)
hnd, vninformatics.com / diendantinhoc.net 13/01/2003
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Other posts in the same group:

Qmail as a Mail Gateway - Phần 4
Go to top Go to original post  

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|