Date: Sat, 4 Sep 2004 04:11:19 +0300 From: Giorgos Keramidas <keramida@ceid.upatras.gr> To: chip@wiegand.org Cc: freebsd-questions@freebsd.org Subject: Re: sendmail setup Message-ID: <20040904011119.GB26236@gothmog.gr> In-Reply-To: <20040903165714.31990153.chip@wiegand.org> References: <20040903165714.31990153.chip@wiegand.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2004-09-03 16:57, chip@wiegand.org wrote: > Could someone please just explain what is needed to make it send mail > out to the world from just one machine on the lan. It can't be as hard > as it appears to be. The setup of my workstation at work to forward outgoing email to the mail gateway available to all the machines of the internal network is the following: Sendmail options in rc.conf =========================== The following options are in my `/etc/rc.conf' file: % grep sendmail /etc/rc.conf sendmail_enable="NO" sendmail_outbound_enable="NO" sendmail_submit_enable="YES" sendmail_submit_flags="-L sm-mta -bd -q5m -ODaemonPortOptions=Addr=localhost" sendmail_msp_queue_enable="YES" sendmail_msp_queue_flags="-L sm-msp -Ac -q30m" % The two enabled sendmail processes have the following function: submit This listens on 127.0.0.1:25 and allows local processes (including the msp_queue process) to post messages. It uses sendmail.cf as its configuration file and can forward all your outgoing messages to the mail gateway of your LAN (see the SMART_HOST option below). msp_queue This sendmail process scans periodically the messages in the queue /var/spool/clientmqueue and makes sure they don't get stuck there. The genericstable address rewriting rules ========================================= The file /etc/mail/genericstable contains the following: % cat /etc/mail/genericstable keramida@internal-host.internal.domain keramida@ceid.upatras.gr % Thus, all messages posted by user `keramida' on my workstation will have their address rewritten to keramida@ceid.upatras.gr, which is certainly more useful to the rest of the world than my internal workstation address. The mailertable message routing table ===================================== I want all my company email routed through our VPN to the internal email server, instead of travelling through the Internet to reach the same server's external interface. To accomplish this I use a mailertable with the following entries: % cat /etc/mail/mailertable .company.com smtp:internal-mx.company.com company.com smtp:internal-mx.company.com % Custom envelope from addresses ============================== Some times I run scripts under my uid that want to "fake" their envelope from address. Thus, I have created a file called /etc/mail/trusted-users with a list of usernames that are allowed to set their envelope from address with sendmail -f user@host without having a warning added automagically by Sendmail in their header: % cat /etc/mail/trusted-users keramida % The local hostnames =================== The file local-host-names as you already mentioned contains the list of hostnames that my workstation should consider `local' and attempt to deliver to a local user: % cat /etc/mail/local-host-names internal-host.internal.domain internal-host % I've added both the `internal-host' and `internal-host.internal.domain' names, in case some locally running program tries to send mail using only the hostname and not the fully qualified domain name of the workstation in the local LAN. The hostname.mc file ==================== The Makefile in /etc/mail will look for a file called `hostname.mc' where hostname is the short host name of your machine and use that as the source for generating `sendmail.cf'. If this file does not exist `freebsd.mc' is copied to `hostname.mc' and the rest of the Makefile works as before. The differences of my hostname.mc file from the freebsd.mc installed by FreeBSD 6.0-CURRENT are: +FEATURE(genericstable, `hash -o /etc/mail/genericstable') -dnl define(`SMART_HOST', `your.isp.mail.server') +define(`SMART_HOST', `smtp.internal.domain') +FEATURE(masquerade_entire_domain) +FEATURE(masquerade_envelope) +MASQUERADE_AS(`company.com') +MASQUERADE_DOMAIN(`internal.domain') +FEATURE(use_cw_file) define(`confCW_FILE', `-o /etc/mail/local-host-names') +FEATURE(use_ct_file) +define(`confCT_FILE', `-o /etc/mail/trusted-users') -DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O') After what I wrote above the changes and their reasoning should be easy to understand, except these few lines: +FEATURE(masquerade_entire_domain) +FEATURE(masquerade_envelope) +MASQUERADE_AS(`company.com') +MASQUERADE_DOMAIN(`internal.domain') -DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O') The first one is to make sure that all email sent from my workstation (or forwarded from my workstation, in case I enable an internal SMTP server later) will use @company.com addresses. The second one is because I've removed IPv6 support from my kernel and I don't like having Sendmail bother me about failed IPv6 connection attempts. The Final Steps =============== * Make sure you don't have different map types defined in your hostname.mc and in the Makefile of `/etc/mail' (i.e. a hardwired map type of `btree' in hostname.mc for the access.db table and a default map type of `hash' in Makefile). * Update the generated files of /etc/mail: # cd /etc/mail # make && make install && make restart * That's all.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040904011119.GB26236>