Vô hiệu hóa phân phối cục bộ trong Sendmail


31

Tôi đang sử dụng Sendmail trên máy chủ Centos để gửi email cho các tập lệnh PHP, nhưng vấn đề là thư được gửi đến hộp thư cục bộ trên máy chứ không phải là những gì được chỉ định trong bản ghi MX cho tên miền - thực sự trỏ đến một máy khác sử dụng cho email.

Tôi muốn sendmail không thử và gửi thư cục bộ cho tên miền mà máy được thiết lập, có cách nào đơn giản để vô hiệu hóa phân phối cục bộ không?

Tên miền không có trong tệp tên máy chủ cục bộ.

Tôi đã thực hiện rất nhiều việc và tôi đã xem xét:

Cấu hình Sendmail để không gửi thư đến máy cục bộ

Vô hiệu hóa phân phối cục bộ trong Sendmail

Nhưng hoặc không có câu trả lời hoặc nó không phù hợp.

Tôi không muốn chuyển tiếp đến một máy chủ khác, tôi chỉ muốn nó gửi thư bất kể tên miền.

Để cung cấp một ví dụ:

Tôi có hai máy chủ, một là máy chủ thư tại mail.example.com và máy chủ web là example.com, khi tôi sử dụng dịch vụ smtp trên máy chủ web, hiện tại nó sẽ chuyển thư đến hộp thư cục bộ trên example.com, nhưng nó sẽ được gửi đến hộp thư trên mail.example.com

Đầu ra của sendmail -bt trả về:

CHẾ ĐỘ KIỂM TRA ĐỊA CHỈ (quy tắc 3 KHÔNG được gọi tự động)
Đi vào  
> 3.0 info@example.com
đầu vào chuẩn hóa: thông tin @ ví dụ. com
Đầu vào Canonify2: thông tin 
Trả về Canonify2: thông tin 
trả về canonify: thông tin 
phân tích cú pháp: thông tin 
Đầu vào Parse0: thông tin 
Parse0 trả về: thông tin 
ParseLocal đầu vào: thông tin 
Trả về ParseLocal: thông tin 
Đầu vào Parse1: thông tin 
Trả về Parse1: $ # local $: thông tin
trả về phân tích cú pháp: $ # local $: thông tin

stalkr.net/forum/ từ dường như là điều gần gũi nhất với những gì tôi thực sự sau đó. Cụ thể, cài đặt MAIL_HUB được đề cập, nhưng dường như nó không thực sự hoạt động.

Hãy thử như sau: sendmail -bt và sau đó gõ 3.0 user@domin.com Nó sẽ cung cấp cho bạn rất nhiều quy tắc viết lại, những quy tắc cuối cùng sẽ cung cấp cho bạn chuyển tiếp mà nó sẽ sử dụng. Vui lòng cung cấp đầu ra.
Francois Wolmarans

Xin chào Francois, tôi đã chỉnh sửa câu hỏi của mình để bao gồm đầu ra

Câu trả lời:


37

Tôi đã làm gì để vô hiệu hóa giao hàng địa phương. Tôi sẽ sử dụng tên miền example.com.

Yêu cầu:

  • example.com Một mục nhập trỏ đến địa chỉ IP được gán cho một trong các giao diện eth.
  • / etc / hosts xác định example.com được gán cho cùng một địa chỉ IP như trên
  • example.com bản ghi MX trỏ đến máy chủ Google (ASPMX.L.GOOGLE.COM, v.v.)
  • cài đặt sendmail mặc định (của tôi là trên Ubuntu)

Các bước:

vim /etc/mail/sendmail.mc

cuối cùng:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

và sau đó:

sendmailconfig (or /etc/mail/make depending on your distro)
service sendmail restart

thử nghiệm:

echo -e "To: user@example.com\nSubject: Test\nTest\n" | sendmail -bm -t -v
echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v

Bạn sẽ thấy nó kết nối với máy chủ google và sau đó bạn sẽ thấy thư của mình được gửi đến hộp thư đến Google của bạn.


3
Điều này làm việc hoàn hảo, tôi chỉ tự hỏi bởi có một. sau tên miền.
Rodrigo

Làm việc hoàn hảo là tốt!
Filipe Pina

Cảm ơn! Tôi đã cố gắng khắc phục điều này trong một thời gian. Tôi đã làm như sau; lọc và cài đặt lại sendmail, chạy sendmailconfig, thêm các dòng bạn đã chỉ định, chạy sendmailconfiglại và thực hiện service sendmail restartvà nó hoạt động!
Liam Newmarch

@Rodrigo ví dụ.com. với một dấu chấm là một FQDN chuẩn. Ví dụ.com không có dấu chấm là tương đối và do đó không chính xác, ví dụ, nó có thể có nghĩa là example.com.yourdomain.org. tùy thuộc vào cài đặt hệ điều hành của bạn. Đây chính xác là sự khác biệt giống như giữa /etc/passwdetc/passwd
kubanchot

4

Nhờ sporker và Pawel, bạn đã đưa tôi đi đúng hướng để sửa lỗi này.

Vấn đề ban đầu của tôi là sendmail đã xem xét tài khoản email example.com của tôi như tài khoản cục bộ.

Các liên kết này tỏ ra rất hữu ích: Sendmail đến tên miền cục bộ bỏ qua các bản ghi MX (phần 2) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-sendmail-bỏ qua-mailertable-some-semilocal-domain.html

Nhưng trong trường hợp của tôi, sử dụng FreeBSD 8.2, điều thực sự đã làm là:

# cd /etc/mail

# vim freebsd.mc

Thêm hai dòng sau:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

Ngay trước khi:

MAILER(local)
MAILER(smtp)

# make

--- Đây là đầu ra ---

 cp freebsd.mc host.example.com.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.mc > host.example.com.cf
 cp freebsd.submit.mc host.example.com.submit.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.submit.mc > host.example.com.submit.cf

--- Kết thúc đầu ra ---

# cp sendmail.cf sendmail.cf.bak

# cp host.example.com.cf sendmail.cf

# /etc/rc.d/sendmail restart

Hy vọng điều này sẽ tiết kiệm một số đau đầu cho một ai đó.


1

Tôi không phải là người gửi thư nhưng tôi tin rằng sendmail sẽ coi bất kỳ tên miền nào được lưu trữ /etc/mail/local-host-namesdưới dạng tên miền cục bộ.
Bạn có thể thử làm trống tệp này, (không xóa nó) và khởi động lại sendmail và xem cách bạn đi.

EDIT
tên tập tin tôi đã đề cập là thực sự thiết lập trong sendmail.cfvà bạn có thể không được thiết lập để local-host-names
nhìn vào /etc/mail/sendmail.cfcho

# file containing names of hosts for which we receive email 
Fw/etc/mail/local-host-names    

Đây không phải là thử nghiệm thực tế mà chỉ là tôi suy nghĩ thành tiếng.


Đúng, đó là lý do tại sao tôi đã đề cập đến tên miền không có trong tệp tên máy chủ cục bộ

Xin lỗi, điều đó sẽ dạy tôi trả lời những câu hỏi tôi không đọc đúng.
aussielunix

Có vấn đề này trên một tập hợp các máy chủ Solaris 10 được vá gần đây (100 bản vá hoặc hơn, nhưng chỉ một số ít gặp phải sự cố). Đây là bản sửa lỗi! Cảm ơn!
Tín hiệu15

0

Đây có thể không phải là giải pháp bạn đang tìm kiếm nhưng nếu vấn đề của bạn là người dùng "quản trị viên" hoặc "root" đang nhận được rất nhiều email và một hộp thư lớn bạn có thể muốn xem xét việc thiết lập một công việc định kỳ để xóa hộp thư ra ngoài mỗi tuần, ngày, vv

Chúng tôi đã có một số máy chủ CentOS có vấn đề này nhưng đôi khi chúng tôi muốn đọc thư vì nó có thể giúp chẩn đoán các vấn đề khác nhau đôi khi.

Giải pháp đơn giản là chỉ cần cron job và lau hộp một lần.

Nếu chúng tôi tìm thấy một vấn đề ... chúng tôi sẽ bình luận về công việc định kỳ (tạm thời) và đọc qua nhật ký và email để tìm manh mối.

Chỉ cần một suy nghĩ ... và một giải pháp nhanh chóng / dễ dàng cho bạn.

Nếu không, hãy xem tệp sendmail.mc và sửa đổi cho phù hợp.


Cập nhật nhanh:

Đây không phải là chính xác những gì bạn yêu cầu nhưng có thể cung cấp cho bạn một số ý tưởng và giúp làm sáng tỏ mọi thứ cho bạn:

http://www.pettingers.org/code/sendmail-local.html


Xin lỗi đã không giúp đỡ. Tất cả những gì tôi muốn làm là không có thư được gửi tại địa phương, tại sao sendmail lại làm việc này khó khăn đến vậy?

0

Cá nhân tôi là người của một postfix, nhưng điều này nghe có vẻ giống như bạn đã cấu hình máy chủ gửi để nhận thư cho @ yourdomain.com. Nếu có một sendmail tương đương với cơ chế vận chuyển trong postfix, thì đó là những gì tôi sử dụng để định tuyến thư nội bộ giữa các máy chủ của mình.


Tôi không cấu hình nó quá nhiều, vì nó là mặc định cho cài đặt sendmail centos.

0

Có vẻ như Ruleset của bạn loại bỏ thông tin tên miền. Tôi đã bao gồm một số bước khắc phục sự cố chung bên dưới. Nếu điều này không hoạt động, bạn sẽ phải gửi cho tôi sendmail.cf của bạn để xem.

Từ đầu ra, example.com được coi là một miền cục bộ. làm một nslookup:

đặt q = mx

tên miền.com

Nếu điều này cung cấp địa chỉ IP của máy cục bộ thì bạn cần xem dns của mình. Đồng thời xem trong / etc / hosts để đảm bảo domain.com không được liệt kê.

Nó dường như cũng loại bỏ @ domain.com, bạn có thể vui lòng thử với một cái gì đó như user@stackoverflow.com để xem nếu nó cũng liệt kê nó như là một tên miền địa phương.

Đồng thời kiểm tra giá trị Cw trong tệp sendmail.cf của bạn.


Cảm ơn Francois, tôi bắt đầu hiểu nội bộ sendmail tốt hơn một chút. Bây giờ tôi đã quyết định thay đổi tên máy chủ của máy để xử lý mọi thứ, vì vậy bây giờ là www.example.com thay vì example.com có ​​nghĩa là nó sẽ phân phối cục bộ cho user@www.example.com nhưng không user@example.com - đó là một sự thỏa hiệp ok đối với tôi ở giai đoạn này.

0

Có thể không phải là những gì bạn muốn, nhưng SSMTP rất tốt cho một máy chủ chỉ gửi đi, nơi bạn có thể chỉ định một trung tâm thư.


Cảm ơn, tôi sẽ cung cấp cho SSMTP một cái nhìn, vẫn đang cố gắng sửa lỗi sendmail cho đến bây giờ.

0

Nếu bạn muốn trả về lỗi khi gửi đến địa chỉ cục bộ, bạn có thể sử dụng bản đồ truy cập và đại loại như:

@your.domain error:nouser 550 No such user here

Nếu bạn muốn các thư email được 'gửi' nhưng bị vứt đi, bạn có thể cài đặt một mục nhập có thể xác định được bí danh mọi thứ cho " @your.domain" thành dev-null. Có thể hữu ích khi tiếp tục gửi ít nhất " root" cục bộ, bởi vì nó thường là người nhận báo cáo email từ các công việc định kỳ, v.v ... Hãy thử một cái gì đó như thế này trong virtusertable:

root@your.domain local:root

@your.domain local:dev-null

Với một dev-nullbí danh cục bộ chuyển hướng thư đến / dev / null, điều này sẽ tiếp tục gửi email gốc, nhưng vứt bỏ các thư được gửi cho người dùng khác.


0

Bản sửa lỗi của Pawel hoạt động với tôi nhưng sendmailconfig không tồn tại trên centos nên tôi phải chạy

cd /etc/mail    
m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf
service sendmail restart

để cập nhật cấu hình


quy tắc thứ hai đó không hoạt động / tồn tại trên centOS của tôi
solsol

0

Chỉ cần xác nhận rằng câu trả lời của Pawel đã giải quyết vấn đề rất giống tôi.

Đối với bất kỳ ai sử dụng FreeBSD nhưng không quan tâm đến việc tham gia quá nhiều vào tập tin cf sendmail, trình tự sau đây là những gì bạn sẽ sử dụng để thêm hai dòng trong ví dụ của Pawel:

cd /etc/mail
make conf (generates stock .mc/.cf files with the hostname as part of the 
filename - these will NOT be overriten during an upgrade)
vi hostname.mc
(add the two lines to the .mc file right above the last two "MAILER" lines)
make conf
cp hostname.cf sendmail.cf
/etc/rc.d/sendmail restart

0

Tôi đã làm theo những gợi ý này và nhận thấy rằng chỉ cần thêm bước mà pawel đã đề cập,

"/ etc / hosts xác định example.com được gán cho cùng một địa chỉ IP như trên", về cơ bản tôi đã thêm IP máy chủ của mình theo sau là tên máy chủ vào /etc/hoststệp và đó là địa chỉ đó.

Đủ để tôi nhận email được chuyển qua google và quay lại email của mình.


0

Nếu bạn đang sử dụng Cpanel / WHM để quản lý máy chủ của mình, hãy đảm bảo bạn chọn Remote Mail Exchanger trong Cpanel / WHM thay vì Tự động phát hiện cấu hình. Remote Mail Exchanger sẽ gửi tất cả email thông qua các bản ghi MX bao gồm cả tên miền cục bộ. Với Tự động, email tên miền cục bộ sẽ được định tuyến trực tiếp cục bộ và sẽ không được gửi đến máy chủ bên ngoài được xác định trong bản ghi MX.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.