I'm posting this to the postfix list rather than the FreeBSD list
because I've found the level of expertise here to be almost
unsurpassed.

In trying to substitute postfix for sendmail on FreeBSD 8.0, I've come
across a problem with mail sent from the command line (including mail
from the syslogd daemon).
No matter what I do to disable the sendmail binary (using mailwrapper)
sendmail seems to grab port 25 on the localhost and any mail sent from
the command line that's destined
for a local account is shunted off, even while the mail reaches
procmail and is properly forwarded to gmail as per my recipe.

After going through all the steps of disabling sendmail in rc.conf and
setting up mainwrapper I am getting the following error:

[satyr ~]$ mail -s test jorge
test
.

[satyr ~]$ WARNING: RunAsUser for MSP ignored, check group ids
(egid=1002, want=25)
can not chdir(/var/spool/clientmqueue/): Permission denied
Program mode requires special privileges, e.g., root or TrustedUser.

Here's the corresponding logfile entry, which seems pretty clearly to
point to the (presumably) disabled sendmail:

satyr# tail /var/log/maillog
Feb  9 09:16:00 satyr sendmail[63415]: NOQUEUE: SYSERR(jorge): can not
chdir(/var/spool/clientmqueue/): Permission denied

Here are the permissions and owners of the queue:

satyr# ls -ld /var/spool/clientmqueue/
drwxrwx---  2 smmsp  smmsp  512 Feb  9 06:57 /var/spool/clientmqueue/

I then ran across the following sendmail README on FreeBSD:

[...]

As of sendmail 8.12, in order to improve security, the sendmail binary no
longer needs to be set-user-ID root.  Instead, a set-group-ID binary
accepts command line mail and relays it to a full mail transfer agent via
SMTP.  A group writable client mail queue (/var/spool/clientmqueue/ by
default) holds the mail if an MTA can not be contacted.

To accomplish this, under the default setup, an MTA must be listening on
localhost port 25.  If the rc.conf sendmail_enable option is set to "NO",
a sendmail daemon will still be started and bound only to the localhost
interface in order to accept command line submitted mail (note that this
does not work inside jail(2) systems as jails do not allow binding to
just the localhost interface).  If this is not a desirable solution, it
can be disabled using the sendmail_submit_enable rc.conf option.  However,
if both sendmail_enable and sendmail_submit_enable are set to "NO"
[this is true in my case],
you must do one of two things for command line submitted mail:

1. Designate an alternative host for the submission agent to contact
   by altering /etc/mail/freebsd.submit.mc (or setting SENDMAIL_SUBMIT_MC
   in /etc/make.conf to an alternate .mc file) and using
   'make install-submit-cf' in /etc/mail/.  Change the FEATURE(msp) line
   to FEATURE(msp, hostname) where hostname is the fully qualified hostname
   of the alternative host.

Or:

2. Return to using a set-user-ID root sendmail binary by changing the
   ownership and permissions on the sendmail binary and removing the
   /etc/mail/submit.cf file:
        chown root /usr/libexec/sendmail/sendmail
        chmod 4755 /usr/libexec/sendmail/sendmail
        rm /etc/mail/submit.cf
   If you install from source, set the SENDMAIL_SET_USER_ID flag in
   /etc/make.conf.

[...]

The first of the two suggestions isn't an option for me; I control
only this single mailserver.  And I'm not quite sure about the
second: I'd rather avoid a set-user-ID root sendmail if possible.  I
just want postfix to handle mail that comes from the command
line destined for localhost 25.

In case there's something I can do inside postfix so that it binds the
daemon to localhost 25 before the vestigal sendmail
gets there, here are my postfix settings:

[satyr ~]$ postconf -n
alias_database = hash:/etc/mail/aliases
alias_maps = hash:/etc/mail/aliases
allow_percent_hack = no
append_at_myorigin = yes
append_dot_mydomain = no
biff = no
bounce_queue_lifetime = 4h
bounce_size_limit = 10000
broken_sasl_auth_clients = yes
command_directory = /usr/local/sbin
config_directory = /usr/local/etc/postfix
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
default_destination_concurrency_limit = 10
default_privs = nobody
delay_warning_time = 1h
disable_vrfy_command = yes
fast_flush_domains = $relay_domains
header_checks = regexp:/etc/postfix/header_checks
html_directory = no
inet_interfaces = all
local_destination_concurrency_limit = 2
local_recipient_maps = unix:passwd.byname, $alias_maps
luser_relay =
mail_name = $mydomain Mail Daemon
mail_owner = postfix
mail_spool_directory = /var/mail
mailbox_command = /usr/local/bin/procmail -a "$EXTENSION"
mailbox_size_limit = 0
manpage_directory = /usr/local/man
maximal_queue_lifetime = 4h
message_size_limit = 102400000
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = jorge.cc
myhostname = satyr.jorge.cc
mynetworks_style = host
myorigin = $mydomain
newaliases_path = /usr/local/bin/newaliases
notify_classes = resource, software
recipient_delimiter = +
relay_domains = $mydestination
sample_directory = /usr/local/etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
show_user_unknown_table_name = no
smtp_tls_loglevel = 1
smtp_tls_note_starttls_offer = yes
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:$data_directory/smtp_scache
smtp_tls_session_cache_timeout = 3600s
smtp_use_tls = yes
smtpd_banner = $mail_name ESMTP
smtpd_client_restrictions = permit_mynetworks,
     reject_rbl_client zen.spamhaus.org, reject_unknown_client_hostname,
     reject_unauth_pipelining
smtpd_data_restrictions = reject_unauth_pipelining,
     reject_multi_recipient_bounce
smtpd_delay_reject = yes
smtpd_error_sleep_time = 1s
smtpd_hard_error_limit = 20
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks,
      check_helo_access hash:$config_directory/helo_access,
      reject_unauth_pipelining, reject_non_fqdn_hostname,
      reject_invalid_hostname
smtpd_recipient_restrictions = permit_mynetworks,
      permit_sasl_authenticated, reject_unauth_destination,
      reject_unauth_pipelining, reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender,
     reject_unknown_sender_domain, reject_unknown_address
smtpd_soft_error_limit = 10
smtpd_tls_CAfile = /etc/ssl/postfix/smtpd.pem
smtpd_tls_always_issue_session_ids = yes
smtpd_tls_auth_only = no
smtpd_tls_cert_file = /etc/ssl/postfix/smtpd.pem
smtpd_tls_key_file = /etc/ssl/postfix/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:$data_directory/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
strict_rfc821_envelopes = no
swap_bangpath = no
tls_daemon_random_bytes = 32
tls_random_exchange_name = $data_directory/prng_exch
tls_random_prng_update_period = 3600s
tls_random_reseed_period = 3600s
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 450

The weird thing is that sending mail with telnet through port 25
returns the postfix welcome and it's postfix that seems to accept the mail:

[jorge@satyr /etc/mail]$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 jorge.cc Mail Daemon ESMTP
EHLO satyr.jorge.cc
250-satyr.jorge.cc
250-PIPELINING
250-SIZE 102400000
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: jo...@jorge.cc
250 2.1.0 Ok
RCPT TO: jo...@jorge.cc
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
test
.

250 2.0.0 Ok: queued as A1774108E2C
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

And here's the logfile:

Feb 10 14:59:50 satyr postfix/qmgr[72725]: 4CF3A108E32:
from=<jorge@localhost>, size=320, nrcpt=1 (queue active)
Feb 10 14:59:50 satyr sendmail[91511]: NOQUEUE: SYSERR(jorge): can not
chdir(/var/spool/clientmqueue/): Permission denied

The email isn't stacking up in any other queue that I can find.

The logfile goes on to record a seemingly successful procmail relay to gmail:

Feb 10 15:29:23 satyr postfix/smtpd[5845]: connect from satyr[69.55.232.70]
Feb 10 15:30:52 satyr postfix/smtpd[5845]: 61766108E39:
client=satyr[69.55.232.70]
Feb 10 15:31:08 satyr postfix/cleanup[6234]: 61766108E39:
message-id=<20120210203052.61766108...@satyr.jorge.cc>
Feb 10 15:31:08 satyr postfix/qmgr[72725]: 61766108E39:
from=<jo...@jorge.cc>, size=322, nrcpt=1 (queue active)
Feb 10 15:31:08 satyr postfix/smtp[6478]: setting up TLS connection to
gmail-smtp-in.l.google.com[74.125.45.26]:25
Feb 10 15:31:08 satyr postfix/smtp[6478]: certificate verification
failed for gmail-smtp-in.l.google.com[74.125.45.26]:25: untrusted
issuer /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
Feb 10 15:31:08 satyr postfix/smtp[6478]: Untrusted TLS connection
established to gmail-smtp-in.l.google.com[74.125.45.26]:25: TLSv1 with
cipher RC4-SHA (128/128 bits)
Feb 10 15:31:09 satyr postfix/smtp[6478]: 61766108E39:
to=<jlg.in...@gmail.com>,
relay=gmail-smtp-in.l.google.com[74.125.45.26]:25, delay=48,
delays=46/0.02/0.45/0.77, dsn=2.0.0, status=sent (250 2.0.0 OK
1328905874 s61si7054629yhn.36)
Feb 10 15:31:09 satyr postfix/qmgr[72725]: 61766108E39: removed
Feb 10 15:31:28 satyr postfix/smtpd[5845]: disconnect from satyr[69.55.232.70]
satyr#


I'm completely flummoxed by this.  Ripping sendmail by the roots out
of FreeBSD may not be such a good idea so I've avoided that, though I
would have thought that mailwrapper and the rc.conf settings would
have accomplished essentially the same thing.

Thanks very much in advance for any help.

-- 
Jorge Luis González <jlg.in...@gmail.com>
http://people.umass.edu/jlg/

This email optimized for teletypes.

Reply via email to