Đây là lệnh postfwd2 có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
postfwd2 - daemon tường lửa postfix
SYNOPSIS
postfwd2 [TÙY CHỌN] [SOURCE1, SOURCE2, ...]
Bộ quy tắc: (ít nhất một, được phép sử dụng nhiều lần):
-f, --tệp đọc các quy tắc từ
-r, --rule thêm vào để cấu hình
-s, --scores = trả lại khi điểm vượt quá
Server:
-i, - giao diện nghe trên giao diện
-p, --port nghe trên cổng
--proto loại ổ cắm (tcp hoặc unix)
--server_socket ví dụ: tcp: 127.0.0.1: 10045
-u, - người dùng đặt uid cho người dùng
-g, - nhóm đặt gid thành nhóm
--umask umask cho quyền truy cập tệp chính
--server_umask umask cho quyền truy cập tệp máy chủ
--pidfile tạo pidfile dưới
--min_servers
--max_server
--min_spare_servers số
--max_spare_servers
Bộ nhớ cache:
-c, --cache đặt thời gian chờ của bộ nhớ cache yêu cầu thành giây
--cleanup-request khoảng thời gian dọn dẹp tính bằng giây cho bộ nhớ cache yêu cầu
--cache_interface nghe trên giao diện
--cache_port nghe trên cổng
--cache_proto loại ổ cắm (tcp hoặc unix)
--cache_socket ví dụ: tcp: 127.0.0.1: 10043
--cache_umask umask cho quyền truy cập tệp bộ đệm
--cacheid danh sách các mục yêu cầu cho cache-id
--cache-rdomain-only bỏ qua phần nội bộ của người nhận cho cache-id
--cache-no-sender bỏ qua địa chỉ người gửi cho cache-id
--cache-no-size bỏ qua kích thước cho cache-id
--no_parent_request_cache vô hiệu hóa bộ đệm yêu cầu cha
--no_parent_rate_cache vô hiệu hóa bộ nhớ đệm tỷ lệ mẹ
--no_parent_dns_cache vô hiệu hóa bộ đệm dns gốc (mặc định)
--no_parent_cache vô hiệu hóa tất cả các bộ đệm mẹ
Giá:
- giảm giá khoảng thời gian dọn dẹp tính bằng giây cho bộ nhớ cache tốc độ
Điều khiển:
-k, --kill, --stop chấm dứt postfwd2
- tải lại, --hup tải lại postfwd2
- giống chó bộ đếm thời gian cho cơ quan giám sát tính bằng giây
--respawn hồi sinh chậm trễ trong vài giây
- cấu kiện bộ đếm lỗi hồi sinh tối đa
--daemons danh sách các daemon để bắt đầu
--dumpcache hiển thị nội dung bộ nhớ cache
--dumpstats hiển thị thống kê
-R, --chroot chroot đến trước khi bắt đầu
--delcache xóa một mục khỏi bộ nhớ cache yêu cầu
- tốc độ xóa một mục khỏi bộ nhớ cache tốc độ
DNS:
-n, --nodns bỏ qua bất kỳ bài kiểm tra dựa trên dns nào
--dns_timeout
--dns_timeout_max
--dns_timeout_interval
--cache-rbl-timeout
--cache-rbl-default mẫu dns mặc định nếu không được chỉ định trong bộ quy tắc
--cleanup-rbls
--dns_async_txt thực hiện tra cứu dnsbl A và TXT đồng thời
--dns_max_ns_lookups tên tối đa để tra cứu với sender_ns_addrs
--dns_max_mx_lookups tên tối đa để tra cứu với sender_mx_addrs
Tùy chọn:
-t, - kiểm tra thử nghiệm, luôn trả về "dunno"
-S, -
--noidlestats vô hiệu hóa số liệu thống kê khi không hoạt động
--norulestats vô hiệu hóa mỗi thống kê quy tắc
-Tôi, --instantcfg tải lại bộ quy tắc theo mọi yêu cầu mới
--config_timeout
--keep_rates không xóa bộ đếm giới hạn tốc độ khi tải lại
--save_rates lưu và giới hạn tốc độ tải trên đĩa
--fast_limit_evaluation đánh giá các giới hạn tốc độ trước khi bộ quy tắc được phân tích cú pháp
(xin lưu ý những hạn chế)
plugin:
--bổ sung tải các plugin postfwd từ tệp
Ghi nhật ký:
nhãn -l, --logname cho các thông báo nhật ký hệ thống
--facility sử dụng cơ sở nhật ký hệ thống
--socktype sử dụng syslog socktype
--nodnslog không ghi kết quả dns
--anydnslog ghi lại bất kỳ kết quả dns nào (thậm chí được lưu trong bộ nhớ cache)
--norulelog không ghi nhật ký các hành động quy tắc
--nolog | - thường không ghi nhật ký gì cả
-v, - ghi nhật ký chi tiết, sử dụng hai lần để tăng
- danh sách gỡ lỗi của các lớp gỡ lỗi
Thông tin (chỉ sử dụng ở dòng lệnh!):
-h, --help hiển thị trợ giúp này và thoát
-m, - thủ công hiển thị hướng dẫn chương trình
-V, - thông tin phiên bản đầu ra phiên bản và thoát
-D, --defaults hiển thị cài đặt postfwd2 và thoát
-C, --showconfig hiển thị bộ quy tắc postfwd2 và thoát (cho phép -v)
-L, --stdout chuyển hướng thông báo nhật ký hệ thống đến stdout
-q, --quiet không có syslogging, không có stdout (-P hoạt động để tương thích)
Đã lỗi thời (chỉ để tương thích với postfwd v1):
-d | --daemon, --shortlog, --dns_queuesize, --dns_retries
MÔ TẢ
GIỚI THIỆU
postfwd2 được viết để kết hợp các hạn chế postfix phức tạp trong một bộ quy tắc tương tự như
của hầu hết các bức tường lửa. Chương trình sử dụng giao thức ủy quyền chính sách postfix để kiểm soát
truy cập vào hệ thống thư trước khi thư được chấp nhận (vui lòng truy cập
<http://www.postfix.org/SMTPD_POLICY_README.html> để biết thêm thông tin).
postfwd2 cho phép bạn chọn một hành động (ví dụ: từ chối, dunno) cho sự kết hợp của một số
thông số smtp (như địa chỉ người gửi và người nhận, kích thước hoặc vân tay TLS của khách hàng).
Ngoài ra, nó cung cấp các macro / acls đơn giản cho phép đơn giản và dễ đọc
cấu hình.
Tính năng, đặc điểm:
* Sự kết hợp phức tạp của các tham số smtp
* Kết hợp tra cứu RBL / RHSBL với các hành động tùy ý tùy thuộc vào kết quả
* Hệ thống tính điểm
* Quy tắc dựa trên ngày / giờ
* Macro / ACL, Nhóm, Phủ định
* So sánh các thuộc tính yêu cầu (ví dụ: client_name và helo_name)
* Bộ nhớ đệm bên trong cho các yêu cầu và tra cứu dns
* Tích hợp số liệu thống kê để phân tích hiệu quả quy tắc
CẤU HÌNH
Dòng cấu hình bao gồm các cặp giá trị = item tùy chọn, được phân tách bằng dấu chấm phẩy (`;`)
và hành động mong muốn thích hợp:
[ = ; = ; ...] hành động =
Ví dụ:
client_address = 192.168.1.1; người gửi ==[email được bảo vệ] ; hành động = TỪ CHỐI
Điều này sẽ từ chối tất cả thư từ 192.168.1.1 với người gửi phong bì [email được bảo vệ]. Lệnh của
các yếu tố không quan trọng. Vì vậy, những điều sau đây sẽ dẫn đến kết quả tương tự như
ví dụ trước:
hành động = TỪ CHỐI; client_address = 192.168.1.1; người gửi ==[email được bảo vệ]
Cách các mục yêu cầu so với bộ quy tắc có thể bị ảnh hưởng như sau
đường:
================================================== ==================
ITEM == VALUE true nếu ITEM bằng VALUE
ITEM => VALUE true nếu ITEM> = VALUE
ITEM = <VALUE true nếu ITEM <= VALUE
ITEM> VALUE true nếu ITEM> VALUE
ITEM <VALUE true nếu ITEM <VALUE
ITEM = ~ VALUE true nếu ITEM ~ = / ^ VALUE $ / i
ITEM! = VALUE false nếu ITEM bằng VALUE
ITEM!> VALUE false nếu ITEM> = VALUE
ITEM! <VALUE false nếu ITEM <= VALUE
ITEM! ~ VALUE false nếu ITEM ~ = / ^ VALUE $ / i
ITEM = VALUE hành vi mặc định (xem phần ITEMS)
================================================== ==================
Để xác định các quy tắc đơn lẻ trong các tệp nhật ký của bạn, bạn có thể thêm một số nhận dạng duy nhất cho mỗi
nó:
id = R_001; hành động = TỪ CHỐI; client_address = 192.168.1.1; người gửi ==[email được bảo vệ]
Bạn có thể sử dụng các số nhận dạng này làm mục tiêu cho `nhảy()lệnh `(xem phần ACTIONS
phía dưới). Các ký tự khoảng trắng đầu hoặc cuối sẽ bị bỏ qua. Sử dụng '#' để nhận xét của bạn
cấu hình. Những người khác sẽ đánh giá cao.
Một bộ quy tắc bao gồm một hoặc nhiều quy tắc, có thể được tải từ các tệp hoặc được chuyển dưới dạng
đối số dòng lệnh. Vui lòng xem phần DÒNG HÀNG dưới đây để biết thêm thông tin về
chủ đề này.
Vì các quy tắc postfwd phiên bản 1.30 kéo dài nhiều dòng có thể được xác định bằng tiền tố
các dòng sau với một hoặc nhiều ký tự khoảng trắng (hoặc '}' cho macro):
id = RULE001
client_address = 192.168.1.0 / 24
người gửi ==[email được bảo vệ]
action = REJECT không có quyền truy cập
các phiên bản postfwd trước 1.30 yêu cầu dấu ';' và '\' - ký tự:
id = RULE001; \
client_address = 192.168.1.0 / 24; \
người gửi ==[email được bảo vệ]; \
action = REJECT không có quyền truy cập
MẶT HÀNG
id - một id quy tắc duy nhất, có thể được sử dụng để phân tích nhật ký
id cũng đóng vai trò là mục tiêu cho lệnh "jump".
ngày, giờ - thời gian hoặc phạm vi ngày trong quy tắc được chỉ định sẽ đạt
# ĐỊNH DẠNG:
# Tháng Hai, ngày 29
date = 29.02.2008
# Tháng 24, 26 - XNUMX
date = 24.12.2008-26.12.2008
# từ hôm nay đến ngày 23 tháng XNUMX
date = -23.09.2008
# từ tháng 1, ngày XNUMX cho đến hôm nay
ngày = 01.04.2008-
ngày, tháng - một loạt các ngày trong tuần (Chủ Nhật-Thứ Bảy) hoặc các tháng (Tháng Một-Tháng Mười Hai)
trong quy tắc được chỉ định sẽ đánh
điểm - khi đạt điểm số đã chỉ định (xem phần HÀNH ĐỘNG)
hành động được chỉ định sẽ được trả về postfix
điểm số được đặt trên toàn cầu cho đến khi được xác định lại!
request_score - giá trị này cho phép một người truy cập điểm của một yêu cầu. nó
có thể được sử dụng như một biến ($$ request_score).
rbl, rhsbl, - truy vấn các RBL / RHSBL được chỉ định, các giá trị có thể là:
rhsbl_client, [/ / , / / ]
rhsbl_sender, (mặc định: reply = ^ 127 \ .0 \ .0 \. \ d + $ maxcache = 3600)
rhsbl_reverse_client kết quả của tất cả các truy vấn rhsbl_ * sẽ được kết hợp
trong rhsbl_count (xem bên dưới).
rblcount, rhsblcount - số tiền RBL / RHSBL tối thiểu để khớp. nếu không được chỉ định
một cú đánh RBL / RHSBL duy nhất sẽ khớp với các mục rbl / rhsbl.
bạn có thể chỉ định 'tất cả' để đánh giá tất cả các mục và sử dụng
nó như một biến trong một hành động (xem phần ACTIONS)
(mặc định: 1)
sender_localpart, - local- / domainpart của địa chỉ người gửi
người gửi_miền
receiver_localpart, - local- / domainpart của địa chỉ người nhận
tên_người_nhận
helo_address - postfwd2 cố gắng tìm kiếm helo_name. sử dụng
helo_address = !! (0.0.0.0/0) để kiểm tra xem chưa biết.
Vui lòng không sử dụng điều này để kiểm soát truy cập tích cực
(danh sách trắng), vì nó có thể bị giả mạo.
sender_ns_names, - postfwd2 cố gắng tra cứu tên / địa chỉ ip
sender_ns_addrs của máy chủ định danh cho phần miền người gửi.
Vui lòng không sử dụng điều này để kiểm soát truy cập tích cực
(danh sách trắng), vì nó có thể bị giả mạo.
sender_mx_names, - postfwd2 cố gắng tra cứu tên / địa chỉ ip
sender_mx_addrs của các bản ghi mx cho phần miền người gửi.
Vui lòng không sử dụng điều này để kiểm soát truy cập tích cực
(danh sách trắng), vì nó có thể bị giả mạo.
phiên bản - phiên bản postfwd2, chứa "postfwd2 n.nn"
điều này cho phép kiểm tra dựa trên phiên bản trong bộ quy tắc của bạn
(ví dụ: để di cư). cũng hoạt động với các phiên bản cũ,
bởi vì một mục không tồn tại luôn trả về false:
# phiên bản> = 1.10
id = R01; phiên bản ~ = 1 \. [1-9] [0-9]; sender_domain == some.org \
; action = REJECT xin lỗi không có quyền truy cập
ratecount - chỉ khả dụng cho các hành động rate (), size () và rcpt ().
chứa bộ đếm giới hạn thực tế:
id = R01; action = rate (người gửi / 200/600 / giới hạn REJECT 200 đã vượt quá [$$ ratecount hits])
id = R02; action = rate (người gửi / 100/600 / Đã vượt quá giới hạn 100 WARN [$$ ratecount hits])
Bên cạnh những điều này, bạn có thể chỉ định bất kỳ thuộc tính nào của giao thức ủy quyền chính sách postfix.
Hãy kết hợp chúng theo cách bạn cần (xem phần VÍ DỤ bên dưới).
Hầu hết các giá trị có thể được chỉ định dưới dạng biểu thức chính quy (PCRE). Vui lòng xem bảng dưới đây để biết
chi tiết:
# ================================================= =========
# ITEM = VALUE TYPE
# ================================================= =========
id = something mask = string
date = 01.04.2007-22.04.2007 mask = date (DD.MM.YYYY-DD.MM.YYYY)
time = 08: 30: 00-17: 00: 00 mask = time (HH: MM: SS-HH: MM: SS)
ngày = mặt nạ Thứ Hai-Thứ Tư = các ngày trong tuần (Thứ Hai-Thứ Tư) hoặc số (1-3)
tháng = mặt nạ Tháng Hai-Tháng Tư = tháng (Tháng Hai-Tháng Tư) hoặc số (1-3)
điểm = 5.0 mặt nạ = giá trị dấu phẩy động tối đa
rbl = zen.spamhaus.org mask = / / [, ...]
rblcount = 2 mask = numeric, sẽ khớp nếu rbl truy cập> = 2
helo_address = mặt nạ = CIDR [, CIDR, ...]
sender_ns_names = some.domain.tld mask = PCRE
sender_mx_names = some.domain.tld mask = PCRE
sender_ns_addrs = mặt nạ = CIDR [, CIDR, ...]
sender_mx_addrs = mặt nạ = CIDR [, CIDR, ...]
#------------------------------
# Postfix phiên bản 2.1 trở lên:
#------------------------------
client_address = mặt nạ = CIDR [, CIDR, ...]
client_name = another.domain.tld mask = PCRE
reverse_client_name = another.domain.tld mask = PCRE
helo_name = some.domain.tld mask = PCRE
người gửi =[email được bảo vệ] mặt nạ = PCRE
người nhận =[email được bảo vệ] mặt nạ = PCRE
Recei_count = 5 mask = numeric, sẽ khớp nếu người nhận> = 5
#------------------------------
# Postfix phiên bản 2.2 trở lên:
#------------------------------
sasl_method = mặt nạ trơn = PCRE
sasl_username = you mask = PCRE
sasl_sender = mask = PCRE
size = 12345 mask = numeric, sẽ khớp nếu size> = 12345
ccert_subject = blackhole.nowhere.local mask = PCRE (chỉ khi xác minh tls)
ccert_issuer = John + 20Doe mask = PCRE (chỉ khi xác minh tls)
ccert_fingerprint = AA: BB: CC: DD: EE: ... mask = PCRE (KHÔNG sử dụng "..." ở đây)
#------------------------------
# Postfix phiên bản 2.3 trở lên:
#------------------------------
encode_protocol = TLSv1 / SSLv3 mask = PCRE
encode_cipher = DHE-RSA-AES256-SHA mask = PCRE
mã hóa_keyize = 256 mask = số, sẽ khớp nếu kích thước khóa> = 256
...
danh sách hiện tại có thể được tìm thấy tạihttp://www.postfix.org/SMTPD_POLICY_README.html>. Vui lòng
đọc kỹ về thuộc tính nào có thể được sử dụng ở cấp độ nào của giao dịch smtp
(ví dụ: kích thước sẽ chỉ hoạt động đáng tin cậy ở mức END-OF-MESSAGE). Đối sánh mô hình là
đã thực hiện không phân biệt chữ hoa chữ thường.
Cho phép sử dụng nhiều lần cùng một mục và sẽ được so sánh như OR logic, có nghĩa là
điều này sẽ hoạt động như mong đợi:
id = TRUST001; hành động = OK; mã hóa_keyize = 64
ccert_fingerprint=11:22:33:44:55:66:77:88:99
ccert_fingerprint=22:33:44:55:66:77:88:99:00
ccert_fingerprint=33:44:55:66:77:88:99:00:11
sender = @ domain \ .local $
Các mục client_address, rbl và rhsbl cũng có thể được chỉ định là các mục được phân tách bằng khoảng trắng hoặc bằng dấu phẩy
các giá trị:
id = SKIP01; action = dunno
client_address = 192.168.1.0 / 24, 172.16.254.23
id = SKIP02; action = dunno
client_address = 10.10.3.32 10.216.222.0/27
Các mục sau đây phải là duy nhất:
id, giá trị tối thiểu và tối đa, rblcount và rhsblcount
Bất kỳ mục nào có thể được phủ định bằng cách đặt trước '!!' với nó, ví dụ:
id = HOST001; tên máy chủ == !! secure.trust.local; action = REJECT only secure.trust.local làm ơn
hoặc sử dụng toán tử so sánh bên phải:
id = HOST001; tên máy chủ! = secure.trust.local; action = REJECT only secure.trust.local làm ơn
Để tránh nhầm lẫn với regexps hoặc đơn giản là để hiển thị tốt hơn, bạn có thể sử dụng '!! (...)':
id = USER01; sasl_username = ~ !! (/ ^ (bob | alice) $ /); action = REJECT đó là ai?
Các thuộc tính yêu cầu có thể được so sánh bằng các ký tự '$$' đứng trước, ví dụ:
id = R-003; client_name = !! $$ helo_name; action = CẢNH BÁO helo không khớp với DNS
# hoặc là
id = R-003; client_name = !! ($$ (helo_name)); action = CẢNH BÁO helo không khớp với DNS
Điều này chỉ hợp lệ cho các giá trị PCRE (xem danh sách ở trên). So sánh sẽ được thực hiện như
đối sánh chính xác không phân biệt chữ hoa chữ thường. Sử dụng tùy chọn '-vv' để gỡ lỗi.
Các mục đặc biệt này sẽ được đặt lại cho bất kỳ quy tắc mới nào:
rblcount - chứa số lượng câu trả lời RBL
rhsblcount - chứa số lượng câu trả lời RHSBL
phù hợp - chứa số lượng mục phù hợp
dnsbltext - chứa phần dns TXT của tất cả các câu trả lời RBL và RHSBL trong biểu mẫu
rbltype: rblname: ; rbltype: rblname: ; ...
Các mục đặc biệt này sẽ được thay đổi theo bất kỳ quy tắc phù hợp nào:
request_hits - chứa id của tất cả các quy tắc phù hợp
Điều này có nghĩa là có thể cần phải lưu chúng, nếu bạn định sử dụng các giá trị này trong
quy tắc sau:
# đặt val
id = RBL01; rhsblcount = tất cả; rblcount = tất cả
action = set (HIT_rhls = $$ rhsblcount, HIT_rbls = $$ rblcount, HIT_txt = $$ dnsbltext)
rbl = list.dsbl.org, bl.spamcop.net, dnsbl.sorbs.net, zen.spamhaus.org
rhsbl_client = rddn.dnsbl.net.au, rhsbl.ahbl.org, rhsbl.sorbs.net
rhsbl_sender = rddn.dnsbl.net.au, rhsbl.ahbl.org, rhsbl.sorbs.net
# đối chiếu
id = RBL02; HIT_rhls> = 1; HIT_rbls> = 1; action = 554 5.7.1 bị chặn khi sử dụng $$ HIT_rhls RHSBLs và $$ HIT_rbls RBLs [INFO: $$ HIT_txt]
id = RBL03; HIT_rhls> = 2; action = 554 5.7.1 bị chặn khi sử dụng $$ HIT_rhls RHSBLs [INFO: $$ HIT_txt]
id = RBL04; HIT_rbls> = 2; action = 554 5.7.1 bị chặn khi sử dụng $$ HIT_rbls RBLs [INFO: $$ HIT_txt]
CÁC TẬP TIN
Vì danh sách mục dài postfwd1 v1.15 và postfwd2 v0.18 có thể được lưu trữ trong các tệp riêng biệt:
id = R001; ccert_fingerprint == tệp: / etc / postfwd / wl_ccerts; action = DUNNO
postfwd2 sẽ đọc danh sách các mục (một mục trên mỗi dòng) từ / etc / postfwd / wl_ccerts.
nhận xét được cho phép:
# khách hàng1
11:22:33:44:55:66:77:88:99
# khách hàng2
22:33:44:55:66:77:88:99:00
# khách hàng3
33:44:55:66:77:88:99:00:11
Để sử dụng các bảng hiện có ở định dạng key = value, bạn có thể sử dụng:
id = R001; ccert_fingerprint == bảng: / etc / postfwd / wl_ccerts; action = DUNNO
Điều này sẽ bỏ qua giá trị bên phải. Các mặt hàng có thể được trộn lẫn:
id = R002; hành động = TỪ CHỐI
client_name == không xác định
client_name == tệp: / etc / postfwd / blacklisted
và đối với các mục không phải pcre (được phân tách bằng dấu phẩy):
id = R003; hành động = TỪ CHỐI
client_address == 10.1.1.1, tệp: / etc / postfwd / blacklisted
id = R004; hành động = TỪ CHỐI
rbl = myrbl.home.local, zen.spamhaus.org, tệp: / etc / postfwd / rbls_changed
Bạn có thể kiểm tra cấu hình của mình bằng tùy chọn --show_config tại dòng lệnh:
# postfwd2 --showconfig --rule = 'action = DUNNO; client_address = 10.1.0.0 / 16, tệp: / etc / postfwd / wl_clients, 192.168.2.1 '
nên đưa ra một cái gì đó như:
Quy tắc 0: id -> "R-0"; hành động -> "DUNNO"; client_address -> "=; 10.1.0.0/16, =; 194.123.86.10, =; 186.4.6.12, =; 192.168.2.1"
Nếu tệp không thể đọc được, tệp đó sẽ bị bỏ qua:
# postfwd2 --showconfig --rule = 'action = DUNNO; client_address = 10.1.0.0 / 16, tệp: / etc / postfwd / wl_clients, 192.168.2.1 '
[Cảnh báo ĐĂNG NHẬP]: lỗi: không tìm thấy tệp / etc / postfwd / wl_clients - tệp sẽ bị bỏ qua?
Quy tắc 0: id -> "R-0"; hành động -> "DUNNO"; client_address -> "=; 10.1.0.0/16, =; 192.168.2.1"
Các mục tệp được đánh giá ở giai đoạn cấu hình. Do đó postfwd2 cần được tải lại
nếu một tập tin đã thay đổi
Nếu bạn muốn chỉ định một tệp, tệp đó sẽ được tải lại cho mỗi yêu cầu, bạn có thể sử dụng lfile:
và ltable:
id = R001; client_address = lfile: / etc / postfwd / client_whitelist; action = dunno
Điều này sẽ kiểm tra thời gian sửa đổi của / etc / postfwd / client_whitelist mỗi khi quy tắc
được đánh giá và tải lại nó khi cần thiết. Tất nhiên điều này có thể làm tăng tải hệ thống, vì vậy
xin vui lòng sử dụng nó một cách cẩn thận.
Tùy chọn --showconfig minh họa sự khác biệt:
## được đánh giá ở giai đoạn cấu hình
# postfwd2 --nodaemon -L --rule = 'client_address = table: / etc / postfwd / client; action = dunno '-C
Quy tắc 0: id -> "R-0"; hành động -> "dunno"; client_address -> "=; 1.1.1.1, =; 1.1.1.2, =; 1.1.1.3"
## được đánh giá cho bất kỳ quy tắc nào
# postfwd2 --nodaemon -L --rule = 'client_address = ltable: / etc / postfwd / client; action = dunno '-C
Quy tắc 0: id -> "R-0"; hành động -> "dunno"; client_address -> "=; ltable: / etc / postfwd / client"
Các tệp có thể tham chiếu đến các tệp khác. Sau đây là hợp lệ.
- TẬP TIN /etc/postfwd/rules.cf -
id = R01; client_address = file: /etc/postfwd/clients_master.cf; action = DUNNO
- FILE /etc/postfwd/clients_master.cf -
192.168.1.0/24
tệp: /etc/postfwd/clients_east.cf
tệp: /etc/postfwd/clients_west.cf
- FILE /etc/postfwd/clients_east.cf -
192.168.2.0/24
- FILE /etc/postfwd/clients_west.cf -
192.168.3.0/24
Lưu ý rằng hiện không có phát hiện vòng lặp (/ a / tệp cuộc gọi / a / tệp) và điều này
tính năng này chỉ khả dụng với postfwd1 v1.15 và postfwd2 v0.18 trở lên.
HÀNH ĐỘNG
Tổng quan
Các hành động sẽ được thực thi, khi tất cả các mục quy tắc đã khớp với một yêu cầu (hoặc ít nhất một trong số
bất kỳ danh sách mặt hàng). Bạn có thể tham khảo các thuộc tính yêu cầu bằng $$ ký tự đứng trước, như:
id = R-003; client_name = !! $$ helo_name; action = CẢNH BÁO helo '$$ helo_name' không khớp với DNS '$$ client_name'
# hoặc là
id = R-003; client_name = !! $$ helo_name; action = WARN helo '$$ (helo_name)' không khớp với DNS '$$ (client_name)'
postfix hành động
Các hành động sẽ được phản hồi tới postfix do các yêu cầu ủy quyền chính sách. Bất kỳ hành động
mà postfix hiểu là được phép - xem "quyền truy cập của người đàn ông 5" hoặc
<http://www.postfix.org/access.5.html> để mô tả. Nếu không có hành động nào được chỉ định,
postfix WARN hành động chỉ ghi lại sự kiện sẽ được sử dụng cho quy tắc tương ứng.
postfwd2 sẽ trả về dunno nếu nó đã đến cuối bộ quy tắc và không có quy tắc nào
phù hợp. Điều này có thể được thay đổi bằng cách đặt một quy tắc cuối cùng chỉ chứa một câu lệnh hành động:
...
hành động=không biết ; [email được bảo vệ] # người gửi vẫn ổn
action = từ chối # từ chối mặc định
postfwd2 hành động
Các hành động postfwd2 kiểm soát hành vi của chương trình. Hiện tại bạn có thể chỉ định
Sau đây:
nhảy ( )
nhảy đến quy tắc với id , sử dụng điều này để bỏ qua các quy tắc nhất định.
bạn có thể nhảy ngược lại - nhưng hãy nhớ rằng không có vòng lặp
phát hiện vào lúc này! chuyển đến id không tồn tại sẽ bị bỏ qua.
ghi bàn ( )
điểm của yêu cầu sẽ được sửa đổi theo ,
mà phải là một giá trị dấu phẩy động. người sửa đổi có thể là một trong hai
+ n.nn thêm n.nn vào điểm số hiện tại
-n.nn duy trì n.nn từ điểm số hiện tại
* n.nn nhân điểm hiện tại với n.nn
/n.nn chia điểm hiện tại cho n.nn
= n.nn đặt điểm hiện tại thành n.nn
nếu điểm vượt quá mức tối đa được thiết lập bởi tùy chọn `--scores` (xem
COMMAND LINE) hoặc mục điểm (xem phần ITEMS), hành động
được xác định cho trường hợp này sẽ được trả về (mặc định: 5.0 => "Đã vượt quá điểm REJECT postfwd2").
bộ ( = , = , ...)
lệnh này cho phép bạn chèn hoặc ghi đè các thuộc tính yêu cầu, sau đó có thể là
so với bộ quy tắc khác của bạn. sử dụng điều này để tăng tốc độ so sánh lặp lại với danh sách mục lớn.
vui lòng xem phần VÍ DỤ để biết thêm thông tin. bạn có thể tách nhiều cặp khóa = giá trị
bởi các ký tự ",".
tỷ lệ ( / / / )
lệnh này tạo ra một bộ đếm cho , sẽ được tăng lên bất kỳ lúc nào có yêu cầu
chứa nó đến. nếu nó vượt quá ở trong vài giây nó sẽ trở lại đến postfix.
bộ đếm tốc độ rất nhanh vì chúng được thực thi trước khi bộ quy tắc được phân tích cú pháp.
xin lưu ý rằng bị giới hạn ở các hành động postfix (không có hành động postfwd) cho các phiên bản postfwd <1.33!
# không quá 3 yêu cầu mỗi 5 phút
# từ cùng một khách hàng "không xác định"
id = RATE01; client_name == không xác định
action = rate (client_address / 3/300/450 4.7.1 xin lỗi, tối đa 3 yêu cầu mỗi 5 phút)
kích thước ( / / / )
lệnh này hoạt động tương tự như lệnh rate () với sự khác biệt, bộ đếm tỷ giá là
tăng bởi thuộc tính kích thước của yêu cầu. để làm điều này một cách đáng tin cậy, bạn nên gọi postfwd2 từ
smtpd_end_of_data_restrictions. nếu bạn muốn chắc chắn, bạn có thể kiểm tra nó trong bộ quy tắc:
# giới hạn kích thước 1.5mb mỗi giờ cho mỗi khách hàng
id = SIZE01; protocol_state == END-OF-MESSAGE; client_address == !! (10.1.1.1)
action = size (client_address / 1572864/3600/450 4.7.1 xin lỗi, tối đa 1.5mb mỗi giờ)
rcpt ( / / / )
lệnh này hoạt động tương tự như lệnh rate () với sự khác biệt, bộ đếm tỷ giá là
tăng bởi thuộc tính người nhận của yêu cầu. để làm điều này một cách đáng tin cậy, bạn nên gọi postfwd
từ smtpd_data_restrictions hoặc smtpd_end_of_data_restrictions. nếu bạn muốn chắc chắn, bạn có thể
kiểm tra nó trong bộ quy tắc:
# người nhận giới hạn 3 mỗi giờ cho mỗi khách hàng
id = RCPT01; protocol_state == END-OF-MESSAGE; client_address == !! (10.1.1.1)
action = rcpt (client_address / 3/3600/450 4.7.1 xin lỗi, tối đa 3 người nhận mỗi giờ)
rate5321, size5321, rcpt5321 ( / / / )
giống như các hàm không phải 5321 tương ứng, với sự khác biệt là phần cục bộ của
địa chỉ người nhận đơn đặt hàng của người gửi được đánh giá phân biệt chữ hoa chữ thường theo rfc5321. Điều đó
có nghĩa là yêu cầu từ [email được bảo vệ] và [email được bảo vệ] sẽ được đối xử khác
hỏi ( : [: ])
cho phép một người ủy quyền quyết định chính sách cho một dịch vụ chính sách khác (ví dụ: postgrey). người đầu tiên
và đối số thứ hai (địa chỉ và cổng) là bắt buộc. đối số tùy chọn thứ ba có thể là
được chỉ định để yêu cầu postfwd2 bỏ qua một số câu trả lời nhất định và tiếp tục phân tích bộ quy tắc:
# example1: truy vấn postgrey và trả về câu trả lời của nó cho postfix
id = XÁM; client_address == 10.1.1.1; action = ask (127.0.0.1:10031)
# example2: truy vấn postgrey nhưng bỏ qua câu trả lời của nó, nếu nó khớp với 'DUNNO'
# và tiếp tục phân tích các quy tắc của postfwd
id = XÁM; client_address == 10.1.1.1; action = ask (127.0.0.1:10031:^dunno$)
thư (server / helo / from / to / subject / body)
Lệnh này không được dùng nữa. Thay vào đó, bạn nên thử sử dụng hành động sendmail ().
Lệnh thư rất cơ bản, gửi một tin nhắn với các đối số đã cho. GIỚI HẠN:
Điều này về cơ bản thực hiện một telnet. Không có xác thực hoặc TLS có sẵn. Ngoài ra, nó không
không theo dõi trạng thái thông báo và sẽ thông báo cho bạn bất kỳ lúc nào, quy tắc tương ứng đạt được.
sendmail (sendmail-path :: from :: to :: subject :: body)
Lệnh Mail, sử dụng một tệp nhị phân sendmail hiện có và gửi một tin nhắn với các đối số đã cho.
GIỚI HẠN: Lệnh không theo dõi trạng thái thông báo và sẽ thông báo cho bạn bất kỳ lúc nào,
lần truy cập quy tắc tương ứng (có thể có nghĩa là 100 thư cho một thư có 100 người nhận ở giai đoạn RCPT).
đợi đã ( )
tạm dừng việc thực thi chương trình cho giây. sử dụng cái này cho
trì hoãn hoặc điều tiết các kết nối.
Ghi chú ( )
chỉ cần ghi lại chuỗi đã cho và tiếp tục phân tích cú pháp của bộ quy tắc.
nếu chuỗi trống, không có gì sẽ được ghi (noop).
bỏ ( )
kết thúc chương trình với mã thoát đã cho. hậu tố không
thích quá nên dùng cẩn thận.
Bạn có thể tham khảo các thuộc tính yêu cầu, như
id = R-HELO; helo_name = ^ [^ \.] + $; action = REJECT không hợp lệ helo '$$ helo_name'
MACROS / ACLS
Việc sử dụng nhiều mục dài hoặc kết hợp chúng có thể được viết tắt bằng macro. Những thứ kia
phải có tiền tố là '&&' (hai ký tự '&'). Đầu tiên, các macro phải được định nghĩa là
sau:
&& RBLS {rbl = zen.spamhaus.org, list.dsbl.org, bl.spamcop.net, dnsbl.sorbs.net, ix.dnsbl.manitu.net; };
Sau đó, chúng có thể được sử dụng trong các quy tắc của bạn, như:
&& RBLS; client_name = ^ chưa biết $; hành động = TỪ CHỐI
&& RBLS; client_name = (\ d + [\.-_]) {4}; hành động = TỪ CHỐI
&& RBLS; client_name = [\.-_] (adsl | dynamic | ppp |) [\.-_]; hành động = TỪ CHỐI
Macro cũng có thể chứa các hành động:
# Định nghĩa
&& GONOW {action = TỪ CHỐI yêu cầu của bạn khiến chính sách phát hiện spam của chúng tôi từ chối thư này. Thông tin thêm tại http://www.domain.local; };
# quy tắc
&&ĐI NGAY ; && RBLS; client_name = ^ không xác định $
&&ĐI NGAY ; && RBLS; client_name = (\ d + [\.-_]) {4}
&&ĐI NGAY ; && RBLS; client_name = [\.-_] (adsl | dynamic | ppp |) [\.-_]
Macro cũng có thể chứa macro:
# Định nghĩa
&& RBLS {
rbl = zen.spamhaus.org
rbl = list.dsbl.org
rbl = bl.spamcop.net
rbl = dnsbl.sorbs.net
rbl = ix.dnsbl.manitu.net
};
&&NĂNG ĐỘNG{
client_name = ^ không xác định $
client_name = (\ d + [\.-_]) {4}
client_name = [\.-_] (adsl | dynamic | ppp |) [\.-_]
};
&& GOAWAY {&& RBLS; &&NĂNG ĐỘNG; };
# quy tắc
&&BIẾN ĐI ; action = ứng dụng khách động REJECT và được liệt kê trên RBL
Về cơ bản macro là sự thay thế văn bản đơn giản - xem phần "PARSER" để biết thêm
thông tin.
PLUGINS
Mô tả
Giao diện plugin cho phép bạn xác định các kiểm tra của riêng mình và nâng cao postfwd's
chức năng. Hãy chia sẻ những điều hữu ích!
Cảnh báo
Lưu ý rằng giao diện plugin vẫn đang ở giai đoạn phát triển. Vui lòng kiểm tra các plugin của bạn
cẩn thận, bởi vì lỗi có thể làm cho postfwd bị hỏng! Nó cũng được phép ghi đè
thuộc tính hoặc chức năng tích hợp, nhưng hãy đảm bảo rằng bạn biết mình làm gì vì một số
chúng được sử dụng trong nội bộ.
Hãy ghi nhớ bảo mật, khi bạn truy cập các tài nguyên hợp lý và không bao giờ chạy
postfwd với tư cách là người dùng đặc quyền! Cũng đừng bao giờ tin tưởng đầu vào của bạn (đặc biệt là tên máy chủ và e-mail
địa chỉ).
MẶT HÀNG
Phần bổ trợ mục là chương trình con perl tích hợp các thuộc tính bổ sung cho các yêu cầu trước đó
chúng được đánh giá dựa trên bộ quy tắc của postfwd giống như bất kỳ mục nào khác của ủy quyền chính sách
giao thức. Điều này cho phép bạn tạo séc của riêng mình.
plugin-items không thể được sử dụng có chọn lọc. các chức năng này sẽ được thực thi cho mọi yêu cầu
postfwd nhận được, vì vậy hãy ghi nhớ hiệu suất.
SYNOPSIS:% result = postfwd_items_plugin { }(%lời yêu cầu)
có nghĩa là chương trình con của bạn, được gọi là , có quyền truy cập vào yêu cầu băm được gọi là%,
chứa tất cả các thuộc tính yêu cầu, như $ request {client_name} và phải trả về một giá trị trong
mẫu sau:
lưu: $ kết quả { } =
điều này tạo ra mặt hàng mới chứa đựng , sẽ được tích hợp trong
yêu cầu ủy quyền chính sách và do đó có thể được sử dụng trong bộ quy tắc của postfwd.
# KHÔNG xóa dòng tiếp theo
% postfwd_items_plugin = (
# VÍ DỤ - được tích hợp trong postfwd. không cần phải kích hoạt chúng ở đây.
# cho phép một người kiểm tra phiên bản postfwd trong bộ quy tắc
"phiên bản" => phụ {
của tôi (% yêu cầu) = @_;
của tôi (% kết quả) = (
"phiên bản" => $ NAME. "". $ VERSION,
);
trả về kết quả%;
},
# sender_domain và người nhận_domain
"address_parts" => sub {
của tôi (% yêu cầu) = @_;
của tôi (% kết quả) = ();
$ request {sender} = ~ / @ ([^ @] *) $ /;
$ result {sender_domain} = ($ 1 || '');
$ yêu cầu {người nhận} = ~ / @ ([^ @] *) $ /;
$ result {receiver_domain} = ($ 1 || '');
trả về kết quả%;
},
# KHÔNG xóa dòng tiếp theo
);
SO SÁNH
So sánh các plugin cho phép bạn xác định các mục mới của bạn nên được so sánh như thế nào với bộ quy tắc.
Đây là tùy chọn. Nếu bạn không chỉ định một giá trị, thì giá trị mặc định (== cho đối sánh chính xác, = ~ cho
PCRE, ...) sẽ được sử dụng.
TÓM TẮC: => sub {return & {$ postfwd_compare { }} (@_); },
# KHÔNG xóa dòng tiếp theo
% postfwd_compare_plugin = (
VÍ DỤ - được tích hợp trong postfwd. không cần phải kích hoạt chúng ở đây.
# Ví dụ đơn giản
# TÓM TẮC: = (trả lại & {$ postfwd_compare { }} (@_))
"client_address" => sub {return & {$ postfwd_compare {cidr}} (@_); },
"size" => sub {return & {$ postfwd_compare {numeric}} (@_); },
"receiver_count" => sub {return & {$ postfwd_compare {numeric}} (@_); },
# Ví dụ phức tạp
# TÓM TẮC: = ( , , , )
"số" => phụ {
của tôi ($ cmp, $ val, $ myitem,% request) = @_;
của tôi ($ myresult) = undef; $ myitem || = "0"; $ val || = "0";
if ($ cmp eq '==') {
$ myresult = ($ myitem == $ val);
} elsif ($ cmp eq '= <') {
$ myresult = ($ myitem <= $ val);
} elsif ($ cmp eq '=>') {
$ myresult = ($ myitem> = $ val);
} elsif ($ cmp eq '<') {
$ myresult = ($ myitem <$ val);
} elsif ($ cmp eq '>') {
$ myresult = ($ myitem> $ val);
} elsif ($ cmp eq '! =') {
$ myresult = not ($ myitem == $ val);
} elsif ($ cmp eq '! <') {
$ myresult = not ($ myitem <= $ val);
} elsif ($ cmp eq '!>') {
$ myresult = not ($ myitem> = $ val);
} Else {
$ myresult = ($ myitem> = $ val);
};
trả lại $ myresult;
},
# KHÔNG xóa dòng tiếp theo
);
HÀNH ĐỘNG
Các plugin hành động cho phép xác định các hành động postfwd mới. Bằng cách đặt $ stop-flag, bạn có thể
quyết định tiếp tục hoặc ngừng phân tích cú pháp bộ quy tắc.
TÓM TẮC: ( , , , , ) =
( , , , , , )
# KHÔNG xóa dòng tiếp theo
% postfwd_actions_plugin = (
# VÍ DỤ - được tích hợp trong postfwd. không cần phải kích hoạt chúng ở đây.
# Ghi chú( ) chỉ huy
"note" => sub {
của tôi ($ index, $ bây giờ, $ mycmd, $ myarg, $ myline,% request) = @_;
của tôi ($ myaction) = 'dunno'; của tôi ($ dừng) = 0;
log_info "[RULES]". $ myline. "- ghi chú:". $ myarg if $ myarg;
return ($ stop, $ index, $ myaction, $ myline,% request);
},
# lượt bỏ qua tiếp theo quy tắc
"bỏ qua" => phụ {
của tôi ($ index, $ bây giờ, $ mycmd, $ myarg, $ myline,% request) = @_;
của tôi ($ myaction) = 'dunno'; của tôi ($ dừng) = 0;
$ index + = $ myarg if ($ myarg and not (($ index + $ myarg)> $ # Quy tắc));
return ($ stop, $ index, $ myaction, $ myline,% request);
},
# kết xuất nội dung yêu cầu hiện tại vào nhật ký hệ thống
"dumprequest" => phụ {
của tôi ($ index, $ bây giờ, $ mycmd, $ myarg, $ myline,% request) = @_;
của tôi ($ myaction) = 'dunno'; của tôi ($ dừng) = 0;
map {log_info "[DUMP] rule = $ index, Thuộc tính: $ _ = $ request {$ _}"} (key% request);
return ($ stop, $ index, $ myaction, $ myline,% request);
},
# KHÔNG xóa dòng tiếp theo
);
COMMAND ĐƯỜNG DÂY
Bộ quy tắc
Các đối số sau đây được sử dụng để chỉ định nguồn của bộ quy tắc postfwd2. Điều này có nghĩa là
rằng ít nhất một trong những điều sau đây là bắt buộc để postfwd2 hoạt động.
-f, --tệp
Đọc các quy tắc từ . Vui lòng xem phần CẤU HÌNH
dưới đây để biết thêm thông tin.
-r, --rule
Thêm vào bộ quy tắc. Hãy nhớ rằng bạn có thể phải trích dẫn
chuỗi chứa khoảng trắng hoặc ký tự shell.
Ghi điểm
-s, --scores =
Lợi nhuận để postfix, khi điểm của yêu cầu vượt quá
Được phép sử dụng nhiều lần. Chỉ cần xâu chuỗi các lập luận của bạn, như:
postfwd2 -r " = ; hành động = " -NS -NS ...
or
postfwd2 --scores 4.5 = "CẢNH BÁO điểm cao" --scores 5.0 = "REJECT postfwd2 điểm quá cao" ...
Trong trường hợp có nhiều điểm, trận đấu cao nhất sẽ được tính. Thứ tự của các đối số sẽ
được phản ánh trong bộ quy tắc postfwd2.
mạng
postfwd2 có thể được chạy dưới dạng daemon để nó lắng nghe các yêu cầu đến trên mạng.
Các đối số sau đây sẽ kiểm soát hành vi của nó trong trường hợp này.
-d, --daemon
postfwd2 sẽ chạy dưới dạng daemon và lắng nghe trên mạng để biết
truy vấn (mặc định 127.0.0.1:10045).
-i, - giao diện
Liên kết postfwd2 với giao diện được chỉ định (mặc định 127.0.0.1).
-p, --port
postfwd2 lắng nghe trên cổng được chỉ định (mặc định tcp / 10045).
--proto
Loại giao thức cho ổ cắm của postfwd. Hiện tại, bạn có thể sử dụng 'tcp' hoặc 'unix' tại đây.
Để sử dụng postfwd2 với ổ cắm miền unix, hãy chạy nó như sau:
postfwd2 --proto = unix --port = / where / postfwd.socket
-u, - người dùng
Thay đổi người dùng thực và hiệu quả thành .
-g, - nhóm
Thay đổi nhóm thực và hiệu quả thành .
--umask
Thay đổi umask cho quyền truy cập tệp của quy trình chính (pidfile).
Chú ý: Đây là umask, không phải chmod - bạn phải chỉ định các bit
KHÔNG nên áp dụng. Ví dụ: umask 077 tương đương với chmod 700.
--cache_umask
Thay đổi umask cho quyền truy cập tệp của quá trình bộ nhớ cache (ổ cắm miền unix).
--server_umask
Thay đổi umask cho quyền truy cập tệp của quy trình máy chủ (ổ cắm miền unix).
-R, --chroot
Chroot tiến trình đến đường dẫn được chỉ định.
Làm ơn nhìn vào http://postfwd.org/postfwd2-chroot.html trước khi sử dụng!
--pidfile
Id quy trình sẽ được lưu trong tệp được chỉ định.
--cơ sở
đặt cơ sở nhật ký hệ thống, mặc định là 'thư'
--socktype
đặt socktype Sys :: Syslog thành 'native', 'inet' hoặc 'unix'.
Mặc định là tự động phát hiện điều này phụ thuộc vào phiên bản mô-đun và hệ điều hành.
-l, --logname
Gắn nhãn cho các thông báo nhật ký hệ thống. Hữu ích khi chạy nhiều
các trường hợp của postfwd.
--loglen
Cắt bỏ bất kỳ thông báo nhật ký hệ thống nào sau nhân vật.
bổ sung
--bổ sung
Tải các plugin postfwd từ tệp. Mời các bạn xem http://postfwd.org/postfwd.plugins
hoặc plugins.postfwd.sample có sẵn từ tarball để biết thêm thông tin.
Tùy chọn đối số
Các tham số này ảnh hưởng đến cách postfwd2 đang hoạt động. Bất kỳ trong số chúng có thể được kết hợp.
-v, --verbose
Ghi nhật ký chi tiết hiển thị rất nhiều thông tin hữu ích nhưng có thể gây ra
hồ sơ đăng nhập của bạn phát triển đáng kể. Vì vậy, sử dụng nó một cách thận trọng. Đặt tùy chọn
hai lần (-vv) để có thêm thông tin (ghi nhật ký tất cả các thuộc tính yêu cầu).
-c, --cache (mặc định = 600)
Hết thời gian chờ cho bộ nhớ cache yêu cầu, kết quả cho các yêu cầu giống hệt nhau sẽ là
được lưu vào bộ nhớ đệm cho đến khi tải lại cấu hình hoặc thời gian này (tính bằng giây) hết hạn.
Cài đặt 0 sẽ tắt tính năng này.
--cache-no-size
Bỏ qua thuộc tính kích thước để so sánh bộ nhớ cache, điều này sẽ dẫn đến tốt hơn
tỷ lệ truy cập bộ nhớ cache. Bạn nên đặt tùy chọn này, nếu bạn không sử dụng kích thước
mục trong bộ quy tắc của bạn.
--cache-no-người gửi
Bỏ qua địa chỉ người gửi để so sánh bộ nhớ cache, điều này sẽ dẫn đến tốt hơn
tỷ lệ truy cập bộ nhớ cache. Bạn nên đặt tùy chọn này, nếu bạn không sử dụng người gửi
mục trong bộ quy tắc của bạn.
--cache-rdomain-chỉ
Thao tác này sẽ loại bỏ phần cục bộ của địa chỉ người nhận trước khi điền vào
bộ nhớ đệm. Điều này có thể làm tăng đáng kể tỷ lệ truy cập vào bộ nhớ cache.
--cache-rbl-timeout (mặc định = 3600)
Giá trị mặc định này sẽ được sử dụng làm thời gian chờ tính bằng giây cho các mục bộ nhớ đệm rbl,
nếu không được chỉ định trong bộ quy tắc.
--cache-rbl-default (mặc định = ^ 127 \ .0 \ .0 \. \ d + $)
Diêm đến câu trả lời rbl / rhsbl (regexp) nếu không được chỉ định trong bộ quy tắc.
--cacheid , , ...
Danh sách các thuộc tính yêu cầu được phân tách bằng csv này sẽ được sử dụng để tạo
số nhận dạng bộ nhớ cache yêu cầu. Chỉ sử dụng điều này, nếu bạn biết chính xác những gì bạn
đang làm. Ví dụ: nếu bạn chỉ sử dụng postfwd2 cho điều khiển RBL / RHSBL,
bạn có thể đặt cái này thành
postfwd2 --cache = 3600 --cacheid = client_name, client_address
Điều này làm tăng hiệu quả của bộ nhớ đệm và cải thiện hiệu suất của postfwd.
Cảnh báo: Bạn nên liệt kê tất cả các mục ở đây, được sử dụng trong bộ quy tắc của bạn!
--cleanup-request (mặc định = 600)
Bộ nhớ đệm yêu cầu sẽ được tìm kiếm các mục đã hết thời gian chờ sau thời gian này trong
giây. Nó là một giá trị tối thiểu. Quá trình dọn dẹp sẽ chỉ diễn ra khi
một yêu cầu mới đến.
--cleanup-rbls (mặc định = 600)
Bộ nhớ đệm rbl sẽ được tìm kiếm các mục hết thời gian sau đó trong
giây. Nó là một giá trị tối thiểu. Quá trình dọn dẹp sẽ chỉ diễn ra khi
một yêu cầu mới đến.
- giảm giá (mặc định = 600)
Bộ nhớ cache tốc độ sẽ được tìm kiếm cho các mục đã hết thời gian chờ sau thời gian này trong
giây. Nó là một giá trị tối thiểu. Quá trình dọn dẹp sẽ chỉ diễn ra khi
một yêu cầu mới đến.
-S, - bản tóm tắt (mặc định = 600)
Hiển thị một số thống kê sử dụng (thời gian hoạt động của chương trình, bộ đếm yêu cầu, các quy tắc phù hợp)
mỗi giây. Tùy chọn này được bao gồm bởi công tắc -v.
Tính năng này sử dụng tín hiệu cảnh báo, vì vậy bạn có thể buộc postfwd2 kết xuất số liệu thống kê
sử dụng `kill -ALRM `(ở đâu là id quy trình của postfwd).
Ví dụ:
19 tháng 12 39:45:1 mail666 postfwd [213000]: [STATS] Bộ đếm: thời gian hoạt động 39 giây, XNUMX quy tắc
19 tháng 12 39:45:1 mail666 postfwd [71643]: [STATS] Yêu cầu: tổng thể 49, 62.88 khoảng thời gian cuối, XNUMX% lần truy cập bộ nhớ cache
19 tháng 12 39:45:1 mail666 postfwd [20.18]: [STATS] Trung bình: 4.90 tổng thể, 557.30 khoảng thời gian cuối, XNUMX đầu
19 tháng 12 39:45:1 mail666 postfwd [44]: [STATS] Nội dung: 239 yêu cầu được lưu trong bộ nhớ cache, XNUMX kết quả dnsbl được lưu trong bộ nhớ cache
19 tháng 12 39:45:1 mail666 postfwd [001]: [STATS] ID quy tắc: R-2704 khớp: XNUMX lần
19 tháng 12 39:45:1 mail666 postfwd [002]: [STATS] ID quy tắc: R-9351 khớp: XNUMX lần
19 tháng 12 39:45:1 mail666 postfwd [003]: [STATS] ID quy tắc: R-3116 khớp: XNUMX lần
...
--không có quy tắc
Tắt thống kê theo quy tắc. Giữ nhật ký của bạn sạch sẽ, nếu bạn không sử dụng chúng.
Tùy chọn này không có hiệu lực nếu không có --summary hoặc --verbose set.
-L, --stdout
Chuyển hướng tất cả các thông báo nhật ký hệ thống đến stdout để gỡ lỗi. Không bao giờ sử dụng cái này với postfix!
-t, --kiểm tra
Trong chế độ thử nghiệm, postfwd2 luôn trả về "dunno", nhưng ghi nhật ký theo
với bộ quy tắc của nó. -v sẽ được đặt tự động với tùy chọn này.
-n, --gật đầu
Tắt tất cả các kiểm tra dựa trên DNS như kiểm tra RBL. Các quy tắc chứa
các yếu tố như vậy sẽ bị bỏ qua.
-n, --nodnslog
Tắt ghi nhật ký các sự kiện dns.
--dns_timeout (mặc định: 14)
Đặt thời gian chờ cho các truy vấn dns không liên tục trong vài giây. Giá trị này sẽ áp dụng cho
tất cả các mục dns trong một quy tắc.
--dns_timeout_max (mặc định: 10)
Đặt bộ đếm thời gian chờ tối đa để tra cứu dnsbl. Nếu thời gian chờ vượt quá giá trị này
dnsbl tương ứng sẽ bị vô hiệu hóa trong một thời gian (xem --dns_timeout_interval).
--dns_timeout_interval (mặc định = 1200)
Bộ đếm thời gian chờ dnsbl sẽ được làm sạch sau khoảng thời gian này trong vài giây. Dùng cái này
kết hợp với tham số --dns_timeout_max.
--dns_async_txt
Thực hiện tra cứu dnsbl A và TXT đồng thời (nếu không thì chỉ dành cho danh sách có tại
ít nhất một bản ghi A). Điều này cần nhiều băng thông mạng hơn do truy vấn tăng lên nhưng
có thể tăng thông lượng vì các tra cứu có thể được song song hóa.
--dns_max_ns_lookups (mặc định = 0)
tên ns tối đa để tra cứu với mục sender_ns_addrs. sử dụng 0 không có giá trị tối đa.
--dns_max_mx_lookups (mặc định = 0)
mx tên tối đa để tra cứu với mục sender_mx_addrs. sử dụng 0 không có giá trị tối đa.
-Tôi, --instantcfg
Các tệp cấu hình, được chỉ định bởi -f sẽ được đọc lại cho mọi yêu cầu
postfwd2 nhận được. Điều này cho phép thay đổi cấu hình một cách nhanh chóng
mà không cần khởi động lại. Mặc dù các tệp sẽ chỉ được đọc nếu cần thiết
(có nghĩa là thời gian truy cập của họ đã thay đổi kể từ lần đọc cuối cùng) điều này có thể
tăng tải hệ thống một cách đáng kể.
--config_timeout (mặc định = 3)
thời gian chờ tính bằng giây để phân tích cú pháp một dòng cấu hình. nếu vượt quá, quy tắc sẽ
được bỏ qua. điều này được sử dụng để ngăn chặn sự cố do các tệp lớn hoặc vòng lặp.
--keep_rates (mặc định = 0)
Với tùy chọn này, postfwd2 không xóa bộ đếm giới hạn tốc độ khi tải lại. Vui lòng
lưu ý rằng bạn phải khởi động lại (không tải lại) postfwd với tùy chọn này nếu bạn thay đổi
bất kỳ quy tắc giới hạn tỷ lệ nào.
--save_rates (mặc định = không có)
Với tùy chọn này, postfwd lưu các bộ đếm giới hạn tốc độ hiện có vào đĩa và tải lại chúng
khi bắt đầu chương trình. Điều này cho phép giới hạn tốc độ liên tục qua các lần khởi động lại hoặc khởi động lại chương trình.
Xin lưu ý rằng postfwd cần quyền truy cập đọc và ghi vào tệp được chỉ định.
--fast_limit_evaluation (mặc định = 0)
Sau khi bộ quy tắc thiết lập một ratelimit, các yêu cầu trong tương lai sẽ được đánh giá dựa trên nó
trước khi tham khảo bộ quy tắc. Chế độ này là hành vi mặc định cho đến v1.30.
Với chế độ này, giới hạn tốc độ sẽ nhanh hơn, nhưng cuối cùng cũng được thiết lập
danh sách trắng-các quy tắc trong bộ quy tắc có thể không hoạt động như mong đợi.
GIỚI HẠN: Tùy chọn này không cho phép các lệnh postfwd lồng nhau như
action = rate (người gửi / 3/60 /chờ đợi(3))
Tùy chọn này không hoạt động với các hàm rate () nghiêm ngặt-rfc5321.
Thông tin đối số
Các đối số này chỉ dành cho việc sử dụng dòng lệnh. Đừng bao giờ sử dụng chúng với postfix!
-C, --showconfig
Hiển thị bộ quy tắc hiện tại. Sử dụng -v cho đầu ra dài dòng.
-V, - phiên bản
Hiển thị phiên bản chương trình.
-h, - trợ giúp
Hiển thị việc sử dụng chương trình.
-m, --thủ công
Hiển thị hướng dẫn sử dụng chương trình.
-D, - mặc định
hiển thị cài đặt postfwd2 hoàn chỉnh.
-P, --perfmon
Tùy chọn này biến bất kỳ syslog và đầu ra nào. Nó được bao gồm
để kiểm tra hiệu suất.
--dumpstats
Hiển thị thống kê sử dụng chương trình.
--dumpcache
Hiển thị nội dung bộ nhớ cache.
--delcache
Xóa một mục khỏi bộ đệm yêu cầu. Sử dụng --dumpcache để xác định các đối tượng.
Ví dụ:
# postfwd --dumpcache
...
% rate_cache ->% sender =[email được bảo vệ] ->% RATE002 + 2_600 -> @count -> '1'
% rate_cache ->% sender =[email được bảo vệ] ->% RATE002 + 2_600 -> @maxcount -> '2'
...
# postfwd --delrate = "sender =[email được bảo vệ]"
xếp hạng mục bộ nhớ cache 'sender =[email được bảo vệ]' loại bỏ
- tốc độ
Xóa một mục khỏi bộ nhớ cache tỷ lệ. Sử dụng --dumpcache để xác định các đối tượng.
REFRESH
Trong chế độ daemon, postfwd2 tải lại bộ quy tắc của nó sau khi nhận được tín hiệu HUP. Xin vui lòng xem
mô tả về công tắc 'I' để cấu hình của bạn được làm mới cho mọi yêu cầu
postfwd2 nhận được.
VÍ DỤ
## danh sách trắng
# 1. mạng 192.168.1.0/24, 192.168.2.4
# 2. client_names * .gmx.net và * .gmx.de
# 3. người gửi *@someshop.tld từ 11.22.33.44
id = WL001; hành động = dunno; client_address = 192.168.1.0 / 24, 192.168.2.4
id = WL002; hành động = dunno; client_name = \. gmx \. (net | de) $
id = WL003; hành động = dunno; sender = @ someshop \ .tld $; client_address = 11.22.33.44
## Kiểm soát TLS
# 1. *@authority.tld chỉ với vân tay TLS chính xác
# 2. *@secret.tld chỉ với kích thước phím> = 64
id = TL001; hành động = dunno; sender = @ Authority \ .tld $; ccert_fingerprint = AA: BB: CC ..
id = TL002; action = REJECT sai dấu vân tay TLS; sender = @ Authority \ .tld $
id = TL003; action = REJECT tls keylength <64; sender = @ secret \ .tld $; mã hóa_keyize = 64
## Kiểm tra RBL kết hợp
# Điều này sẽ từ chối thư nếu
# 1. được liệt kê trên ix.dnsbl.manitu.net
# 2. được liệt kê trên zen.spamhaus.org (sbl và xbl, thời gian chờ bộ nhớ cache dns 1200 giây thay vì 3600 giây)
# 3. được liệt kê trên min 2 của bl.spamcop.net, list.dsbl.org, dnsbl.sorbs.net
# 4. được liệt kê trên bl.spamcop.net và một trong rhsbl.ahbl.org, rhsbl.sorbs.net
id = RBL01; action = REJECT được liệt kê trên ix.dnsbl.manitu.net; rbl = ix.dnsbl.manitu.net
id = RBL02; action = REJECT được liệt kê trên zen.spamhaus.org; rbl = zen.spamhaus.org / 127.0.0. [2-8] / 1200
id = RBL03; action = REJECT được liệt kê trên quá nhiều RBL; rblcount = 2; rbl = bl.spamcop.net, list.dsbl.org, dnsbl.sorbs.net
id = RBL04; hành động = REJECT kết hợp kiểm tra RBL + RHSBL; rbl = bl.spamcop.net; rhsbl = rhsbl.ahbl.org, rhsbl.sorbs.net
## Kích thước thư (yêu cầu đặt message_size_limit thành 30000000)
# 1. 30MB cho hệ thống trong * .customer1.tld
# 2. 20MB cho người dùng SASL joejob
# 3. Mặc định 10MB
id = SZ001; protocol_state == END-OF-MESSAGE; hành động = DUNNO; kích thước <= 30000000; client_name = \. customer1.tld $
id = SZ002; protocol_state == END-OF-MESSAGE; hành động = DUNNO; kích thước <= 20000000; sasl_username == joejob
id = SZ002; protocol_state == END-OF-MESSAGE; hành động = DUNNO; kích thước <= 10000000
id = SZ100; protocol_state == END-OF-MESSAGE; action = REJECT thông báo quá lớn
## Tuyển chọn Greylisting
##
## Lưu ý rằng postfwd không bao gồm danh sách xám. Thiết lập này yêu cầu một dịch vụ postgrey đang chạy
## tại cổng 10031 và lớp hạn chế hậu tố sau trong main.cf của bạn:
##
## smtpd_restrict_classes = check_postgrey, ...
## check_postgrey = check_policy_service inet: 127.0.0.1: 10031
#
# 1. nếu được liệt kê trên zen.spamhaus.org với kết quả 127.0.0.10 hoặc .11, thời gian chờ bộ nhớ cache dns 1200 giây
# 2. Máy khách không có rDNS
# 3. Khách hàng đến từ một số miền quay số
id = GR001; action = check_postgrey; rbl = dul.dnsbl.sorbs.net, zen.spamhaus.org/127.0.0.1[01]/1200
id = GR002; action = check_postgrey; client_name = ^ không xác định $
id = GR003; action = check_postgrey; client_name = \. (t-ipconnect | alicedsl | ish) \. de $
## Ngày giờ
ngày = 24.12.2007-26.12.2007; action = 450 4.7.1 văn phòng đóng cửa trong lễ Giáng sinh
thời gian = 04: 00: 00-05: 00: 00; action = 450 4.7.1 đang bảo trì, hãy thử lại sau
thời gian = -07: 00: 00; sasl_username = jim; action = 450 4.7.1 đến sớm cho bạn, jim
thời gian = 22: 00: 00-; sasl_username = jim; action = 450 4.7.1 đến muộn bây giờ, jim
tháng = -Apr; action = 450 4.7.1 hẹn gặp lại bạn vào tháng XNUMX năm sau
ngày = !! Thứ Hai-Thứ Sáu; action = check_postgrey
## Cách sử dụng bước nhảy
# Phần sau cho phép kích thước thư là 30MB cho các
# người dùng / khách hàng trong khi những người khác sẽ chỉ có 10MB.
id = R001; hành động = bước nhảy (R100); sasl_username = ^ (Alice | Bob | Jane) $
id = R002; hành động = bước nhảy (R100); client_address = 192.168.1.0 / 24
id = R003; hành động = bước nhảy (R100); ccert_fingerprint = AA: BB: CC: DD: ...
id = R004; hành động = bước nhảy (R100); ccert_fingerprint = AF: BE: CD: DC: ...
id = R005; hành động = bước nhảy (R100); ccert_fingerprint = DD: CC: BB: DD: ...
id = R099; protocol_state == END-OF-MESSAGE; action = Thông báo REJECT quá lớn (tối đa 10MB); kích thước = 10000000
id = R100; protocol_state == END-OF-MESSAGE; action = Thông báo REJECT quá lớn (tối đa 30MB); kích thước = 30000000
## Sử dụng điểm số
# Sau đây từ chối một thư, nếu khách hàng
# - được liệt kê trên 1 RBL và 1 RHSBL
# - được liệt kê trong 1 RBL hoặc 1 RHSBL và không có rDNS chính xác
# - các ứng dụng khách khác không có rDNS chính xác sẽ được kiểm tra danh sách xám
# - một số danh sách trắng được sử dụng để giảm điểm
id = S01; điểm = 2.6; action = check_postgrey
id = S02; điểm = 5.0; action = REJECT postfwd điểm quá cao
id = R00; hành động = điểm (-1.0); rbl = exetions.ahbl.org, list.dnswl.org, query.bondedsender.org, spf.trusted-osystemer.org
id = R01; hành động = điểm (2.5); rbl = bl.spamcop.net, list.dsbl.org, dnsbl.sorbs.net
id = R02; hành động = điểm (2.5); rhsbl = rhsbl.ahbl.org, rhsbl.sorbs.net
id = N01; hành động = điểm (-0.2); client_name == $$ helo_name
id = N02; hành động = điểm số (2.7); client_name = ^ không xác định $
...
## Sử dụng tỷ lệ và kích thước
# Sau đây tạm thời từ chối các yêu cầu từ khách hàng "không xác định", nếu họ
# 1. vượt quá 30 yêu cầu mỗi giờ hoặc
# 2. cố gắng gửi hơn 1.5mb trong vòng 10 phút
id = RATE01; client_name == không xác định; protocol_state == RCPT
action = rate (client_address / 30/3600 / 450 4.7.1 xin lỗi, tối đa 30 yêu cầu mỗi giờ)
id = SIZE01; client_name == không xác định; protocol_state == END-OF-MESSAGE
action = size (client_address / 1572864/600/450 4.7.1 xin lỗi, tối đa 1.5mb mỗi 10 phút)
## Macro
# Định nghĩa
&& RBLS {rbl = zen.spamhaus.org, list.dsbl.org, bl.spamcop.net, dnsbl.sorbs.net, ix.dnsbl.manitu.net; };
&& GONOW {action = TỪ CHỐI yêu cầu của bạn khiến chính sách phát hiện spam của chúng tôi từ chối thư này. Thông tin thêm tại http://www.domain.local; };
# quy tắc
&&ĐI NGAY ; && RBLS; client_name = ^ không xác định $
&&ĐI NGAY ; && RBLS; client_name = (\ d + [\.-_]) {4}
&&ĐI NGAY ; && RBLS; client_name = [\.-_] (adsl | dynamic | ppp |) [\.-_]
## Các nhóm
# Định nghĩa
&& RBLS {
rbl = zen.spamhaus.org
rbl = list.dsbl.org
rbl = bl.spamcop.net
rbl = dnsbl.sorbs.net
rbl = ix.dnsbl.manitu.net
};
&& RHSBLS {
...
};
&&NĂNG ĐỘNG{
client_name == không xác định
client_name ~ = (\ d + [\.-_]) {4}
client_name ~ = [\.-_] (adsl | dynamic | ppp |) [\.-_]
...
};
&& BAD_HELO {
helo_name == my.name.tld
helo_name ~ = ^ ([^ \.] +) $
helo_name ~ = \. (local | lan) $
...
};
&&SỰ BẢO TRÌ{
date = 15.01.2007
date = 15.04.2007
date = 15.07.2007
date = 15.10.2007
time=03:00:00 - 04:00:00
};
# quy tắc
id = COMBINED; && RBLS; &&NĂNG ĐỘNG ; action = ứng dụng khách động REJECT và được liệt kê trên RBL
id = MAINTENANCE; &&SỰ BẢO TRÌ ; action = DEFER thời gian bảo trì - vui lòng thử lại sau
# bây giờ với lệnh set (), lưu ý rằng mục dài
# danh sách không cần phải so sánh hai lần
id = RBL01; && RBLS; action = set (HIT_rbls = 1)
id = HELO01; && BAD_HELO; action = set (HIT_helo = 1)
id = DYNA01; &&NĂNG ĐỘNG ; action = set (HIT_dyna = 1)
id = REJECT01; HIT_rbls == 1; HIT_helo == 1; action = REJECT, vui lòng xem http://some.org/info? từ chối = 01 để biết thêm thông tin
id = REJECT02; HIT_rbls == 1; HIT_dyna == 1; action = REJECT, vui lòng xem http://some.org/info? từ chối = 02 để biết thêm thông tin
id = REJECT03; HIT_helo == 1; HIT_dyna == 1; action = REJECT, vui lòng xem http://some.org/info? từ chối = 03 để biết thêm thông tin
## kết hợp với các tính năng rbl nâng cao
#
id = RBL01; rhsblcount = tất cả; rblcount = tất cả; && RBLS; && RHSBLS
action = set (HIT_dnsbls = $$ rhsblcount, HIT_dnsbls + = $$ rblcount, HIT_dnstxt = $$ dnsbltext)
id = RBL02; HIT_dnsbls> = 2; action = 554 5.7.1 bị chặn khi sử dụng $$ HIT_dnsbls DNSBLs [INFO: $$ HIT_dnstxt]
BỘ PHẬN
Cấu hình
Bộ quy tắc postfwd2 có thể được chỉ định tại dòng lệnh (tùy chọn -r) hoặc được đọc từ các tệp
(-NS). Thứ tự các đối số của bạn sẽ được giữ nguyên. Bạn nên kiểm tra trình phân tích cú pháp với -C |
--showconfig chuyển đổi ở dòng lệnh trước khi áp dụng cấu hình mới. Cuộc gọi sau:
postfwd2 --showconfig \
-r "id = TEST; receiver_count = 100; action = CẢNH BÁO thư với hơn 100 người nhận" \
-f /etc/postfwd.cf \
-r "id = DEFAULT; action = dunno";
sẽ tạo ra kết quả sau:
Quy tắc 0: id -> Hành động "KIỂM TRA" -> "CẢNH BÁO thư với hơn 100 người nhận"; receiver_count -> "100"
...
... ...
...
Luật lệ : id -> Hành động "DEFAULT" -> "dunno"
Nhiều mặt hàng cùng loại sẽ được thêm vào danh sách (xem phần "MỤC" để biết thêm
thông tin):
postfwd2 --showconfig \
-r "client_address = 192.168.1.0 / 24; client_address = 172.16.26.32; action = dunno"
sẽ cho kết quả:
Quy tắc 0: id -> "R-0"; hành động -> "dunno"; client_address -> "192.168.1.0/24, 172.16.26.32"
Macro được đánh giá ở giai đoạn cấu hình, có nghĩa là
postfwd2 --showconfig \
-r "&& RBLS {rbl = bl.spamcop.net; client_name = ^ chưa biết $;};" \
-r "id = RBL001; && RBLS; action = REJECT được liệt kê trên spamcopcop và bad rdns";
sẽ cho kết quả:
Quy tắc 0: id -> "RBL001"; action -> "REJECT được liệt kê trên spamcopcop và bad rdns"; rbl -> "bl.spamcop.net"; client_name -> "^ chưa xác định $"
Yêu cầu xử lý
Khi một yêu cầu ủy quyền chính sách đến, nó sẽ được so sánh với bộ quy tắc của postfwd. Đến
kiểm tra quá trình xử lý một cách chi tiết, bạn nên tăng mức độ chi tiết bằng cách sử dụng "-v" hoặc "-vv"
chuyển. "-L" chuyển hướng thông báo nhật ký đến stdout.
Giữ thứ tự của bộ quy tắc nói chung, các mục sẽ được so sánh theo thứ tự ngẫu nhiên,
về cơ bản có nghĩa là
id = R001; hành động = dunno; client_address = 192.168.1.1; người gửi =[email được bảo vệ]
tương đương với
id = R001; người gửi =[email được bảo vệ]; client_address = 192.168.1.1; action = dunno
Danh sách sẽ được đánh giá theo thứ tự được chỉ định. Điều này cho phép một người đặt nhanh hơn
biểu thức lúc đầu:
postfwd2 --nodaemon -vv -L -r "id = RBL001; rbl = localrbl.local zen.spamhaus.org; action = REJECT" /some/where/request.sample
sản xuất những thứ sau
[Thông tin LOGS]: so sánh rbl: "remotehost.remote.net [68.10.1.7]" -> "localrbl.local"
[Thông tin LOGS]: count1 rbl: "2" -> "0"
[Thông tin LOGS]: truy vấn rbl: localrbl.local 7.1.10.68 (7.1.10.68.localrbl.local)
[Thông tin LOGS]: count2 rbl: "2" -> "0"
[Thông tin LOGS]: đối sánh rbl: FALSE
[Thông tin LOGS]: so sánh rbl: "remotehost.remote.net [68.10.1.7]" -> "zen.spamhaus.org"
[Thông tin LOGS]: count1 rbl: "2" -> "0"
[Thông tin LOGS]: truy vấn rbl: zen.spamhaus.org 7.1.10.68 (7.1.10.68.zen.spamhaus.org)
[Thông tin LOGS]: count2 rbl: "2" -> "0"
[Thông tin LOGS]: đối sánh rbl: FALSE
[Thông tin LOGS]: Hành động: dunno
Toán tử phủ định !! ( ) có mức độ ưu tiên cao nhất và do đó sẽ được đánh giá
đầu tiên. Sau đó, các thay thế khác nhau được thực hiện:
postfwd2 --nodaemon -vv -L -r "id = TEST; action = REJECT; client_name = !! ($$ heloname)" /some/where/request.sample
sẽ cho
[Thông tin LOGS]: so sánh client_name: "chưa biết" -> "!! ($$ helo_name)"
[Thông tin LOGS]: phủ định client_name: "không xác định" -> "$$ helo_name"
[Thông tin LOGS]: tên khách hàng thay thế: "chưa biết" -> "english-breakfast.cloud8.net"
[Thông tin LOGS]: khớp với client_name: TRUE
[Thông tin LOGS]: Hành động: TỪ CHỐI
Bộ quy tắc đánh giá
Quy tắc đạt được khi tất cả các mục (hoặc ít nhất một phần tử của danh sách cho mỗi mục) đã khớp.
Ngay khi một mục (hoặc tất cả các phần tử của danh sách) không thể so sánh với yêu cầu
thuộc tính trình phân tích cú pháp sẽ chuyển đến quy tắc tiếp theo trong tập quy tắc postfwd2.
Nếu một quy tắc phù hợp, có hai tùy chọn:
* Quy tắc trả về hành động postfix (dunno, từ chối, ...) Trình phân tích cú pháp dừng xử lý quy tắc và
trả về hành động cho postfix. Các quy tắc khác sẽ không được đánh giá.
* Quy tắc trả về hành động postfwd2 (nhảy(), Ghi chú(), ...) Trình phân tích cú pháp đánh giá
hành động và tiếp tục với quy tắc tiếp theo (ngoại trừ nhảy() or bỏ () hành động - làm ơn
xem phần "HÀNH ĐỘNG" để biết thêm thông tin). Không có gì sẽ được gửi đến postfix.
Nếu không có quy tắc nào phù hợp và khi kết thúc bộ quy tắc, postfwd2 sẽ trả về dunno
mà không cần ghi lại bất cứ thứ gì trừ khi ở chế độ tiết. Bạn có thể đặt một quy tắc nhận tất cả cuối cùng cho
thay đổi hành vi đó:
... ...
id = DEFAULT; action = dunno
sẽ ghi lại bất kỳ yêu cầu nào vượt qua bộ quy tắc mà không cần đạt đến quy tắc trước.
NỢ
Để gỡ lỗi các bước đặc biệt của trình phân tích cú pháp, công tắc '--debug' lấy một danh sách các lớp gỡ lỗi.
Hiện tại các lớp sau được định nghĩa:
tất cả cấu hình bộ nhớ cache debugdns devel dns getcache getdns
getdnspacket giá yêu cầu setcache setdns
parent_cache parent_dns_cache parent_rate_cache parent_request_cache
child_cache child_dns_cache child_rate_cache child_request_cache
HỘI NHẬP
Tích hợp thông qua daemon chế độ
Cách phổ biến để sử dụng postfwd2 là khởi động nó dưới dạng daemon, lắng nghe tại một tcp được chỉ định
Hải cảng. postfwd2 sẽ sinh ra nhiều quy trình con giao tiếp với bộ đệm cha mẹ.
Đây là cách ưa thích để sử dụng postfwd2 trong môi trường có khối lượng lớn. Bắt đầu postfwd2 với
các thông số sau:
postfwd2 -d -f /etc/postfwd.cf -i 127.0.0.1 -p 10045 -u không ai -g không ai -S
Để bộ nhớ đệm hiệu quả, bạn nên kiểm tra xem bạn có thể sử dụng các tùy chọn --cacheid,
--cache-rdomain-only, --cache-no-sender và --cache-no-size.
Bây giờ, hãy kiểm tra nhật ký hệ thống của bạn (thư "cơ sở mặc định") để tìm dòng như:
9 tháng 23 00:24:5158 mail postfwd [2]: postfwdXNUMX n.nn đã sẵn sàng để nhập
và sử dụng `netstat -an | grep 10045` để kiểm tra một cái gì đó như
tcp 0 0 127.0.0.1:10045 0.0.0.0:* NGHE
Nếu mọi thứ hoạt động, hãy mở postfix main.cf của bạn và chèn những thứ sau
127.0.0.1:10045_time_limit = 3600 <--- tích hợp
smtpd_recipient_restrictions = allow_mynetworks <--- khuyến nghị
từ chối_unauth_destination <--- khuyến nghị
check_policy_service inet: 127.0.0.1: 10045 <--- tích hợp
Tải lại cấu hình của bạn bằng cách tải lại postfix và xem nhật ký của bạn. Trong đó hoạt động bạn
sẽ thấy các dòng như sau trong nhật ký thư của bạn:
Ngày 9 tháng 23 01:24:5158 mail postfwd [22]: rule = 9, id = ML_POSTFIX, client = english-breakfast.cloud168.100.1.7.net [XNUMX], sender =[email được bảo vệ], người nhận =[email được bảo vệ], helo = english-breakfast.cloud9.net, proto = ESMTP, state = RCPT, action = dunno
Nếu bạn muốn kiểm tra các mục kích thước hoặc rcpt_count, bạn phải tích hợp postfwd2 vào
smtp_data_restrictions hoặc smtpd_end_of_data_restrictions. Tất nhiên, bạn cũng có thể chỉ định một
lớp giới hạn và sử dụng nó trong các bảng truy cập của bạn. Đầu tiên hãy tạo một tệp
/ etc / postfix / policy chứa:
tên miền1.local postfwdcheck
tên miền2.local postfwdcheck
...
Sau đó postmap tệp đó (`postmap hash: / etc / postfix / policy`), mở main.cf của bạn và nhập
# Lớp Hạn chế
smtpd_restrict_classes = postfwdcheck, ... <--- tích hợp
postfwdcheck = check_policy_service inet: 127.0.0.1: 10045 <--- tích hợp
127.0.0.1:10045_time_limit = 3600 <--- tích hợp
smtpd_recipient_restrictions = allow_mynetworks, <--- khuyến nghị
từ chối_unauth_destination, <--- khuyến nghị
... <--- tùy chọn
check_recipient_access băm: / etc / postfix / policy, <--- integration
... <--- tùy chọn
Tải lại postfix và xem nhật ký của bạn.
THỬ NGHIỆM
Đầu tiên, bạn phải tạo một bộ quy tắc (xem phần Cấu hình). Kiểm tra nó với
postfwd2 -f /etc/postfwd.cf -C
Có một yêu cầu chính sách mẫu được phân phối với postfwd, được gọi là 'request.sample'.
Đơn giản chỉ cần thay đổi nó để đáp ứng yêu cầu của bạn và sử dụng
postfwd2 -f /etc/postfwd.cf
Bạn sẽ nhận được một câu trả lời như
hành động =
Để kiểm tra mạng, tôi sử dụng netcat:
nc 127.0.0.1 10045
để gửi một yêu cầu đến postfwd. Nếu bạn không nhận được gì, hãy đảm bảo rằng postfwd2 đang chạy
và nghe trên các cài đặt mạng được chỉ định.
THI
Một số đề xuất này có thể không phù hợp với môi trường của bạn. Vui lòng kiểm tra yêu cầu của bạn
và thử nghiệm các tùy chọn mới một cách cẩn thận!
- sử dụng các tùy chọn bộ nhớ đệm
- sử dụng toán tử đối sánh đúng ==, <=,> =
- sử dụng ^ và / hoặc $ trong biểu thức chính quy
- sử dụng danh sách mục (nhanh hơn các quy tắc đơn lẻ)
- sử dụng hành động set () trên các danh sách mục lặp lại
- sử dụng các bước nhảy và giới hạn tỷ lệ
- sử dụng quy tắc tra cứu trước cho rbl / rhsbls với hành động ghi chú trống ()
XEM CŨNG THẾ
Nhìn thấyhttp://www.postfix.org/SMTPD_POLICY_README.html> để biết mô tả về cách Postfix
máy chủ chính sách hoạt động.
Sử dụng postfwd2 trực tuyến bằng các dịch vụ onworks.net