Postfix Hardening
Postfix Hardening
Postfix Hardening
English | Deutsch
Search...
Ad Scan your Web-Server for Malware with ISPProtect now. Get Free Trial.
On this page
Harden
ing • Hardening Postfix For ISPConfig 3
• Reverse DNS, (DNS PTR Record)
Postfix • SPF For Your Domain (DNS TXT Record)
For • Postfix main.cf
• SPF Check For Postfix (Debian And Ubuntu)
ISPCon • Greylist
fig 3 • DNSBL (DNS Based Blacklist/Blocklist)
• Postscreen
Author:
Jesús
Córdoba
Email: j.cordoba [at] gmx [dot] net
Forum user: pititis
Version: 1.2
The goal of this tutorial is to harden the mail server postfix used by ISPConfig for
internet mail servers where authenticated users are trusted. With this setup you
will reject a great amount of spam before it passes into your mail queue, saving
a lot of system resources and making your mail server strong against spammers
and spam botnets. Let's go.
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 2 of 18
- Your ISP allows to you change it yourself. Take a look in your control panel.
- Your ISP doesn’t allow to you change it. Just send an email with your request.
69.64-
27.4.20.149.in-
addr.arpa domain
name pointer
pub2.kernel.org.
To set up spf you will need to add a TXT record to your dns zone but first you
can generate your record here: http://www.mailradar.com/spf/
Copy the spf result, then go to ISPConfig -> dns -> zones ->click on your
domain name -> click on records tab -> and click on TXT
Text -> Paste here the spf result (without " ").
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 3 of 18
Postfix main.cf
Helo restrictions:
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authentic
ated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname
Strict rfc:
strict_rfc821_envelopes = yes
Clients restrictions:
Recipient restrictions:
Data restrictions:
smtpd_data_restrictions = reject_unauth_pipelining
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 4 of 18
Smtpd delay:
smtpd_delay_reject = yes
/etc/init.d/postfix reload
or
policy-spf_time_limit = 3600s
Now edit master.cf and add at the end this (for the python version):
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 5 of 18
…reload postfix.
/etc/init.d/postfix reload
Greylist
…reload postfix:
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 6 of 18
/etc/init.d/postfix reload
Greylist in action:
In my example I will use two lists with very good reputation (added to the end of
smtpd_client_restrictions):
rbl in action:
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 7 of 18
Postscreen
The Postfix postscreen daemon provides additional protection against mail server
overload. One postscreen process handles multiple inbound SMTP connections,
and decides which clients may talk to a Postfix SMTP server process. By keeping
spambots away, postscreen leaves more SMTP server processes available for
legitimate clients, and delays the onset of server overload conditions.
We will use for this tutorial the default settings with an exception. These settings
are fine for the most situations
postscreen_greet_action = enforce
Second we add postscreen and some new services to master.cf Note: These
settings can already exists, just uncomment. Also be sure that the line "smtp
inet ... smtpd", including any parameter is commented out (if any, parameters
must be moved to the new smtpd service).
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 8 of 18
service.(if any)
smtp inet n - n - 1 postscreen
tlsproxy unix - - n - 0 tlsproxy
dnsblog unix - - n - 0 dnsblog
/etc/init.d/postfix reload
Suggested articles
27 Comment(s)
Add comment
p
Submit comment
Comments
From: Reply
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 9 of 18
Very useful, thank you - especially because there's a big lack of tutorials for
mailserver hardening otherwise.
From: Reply
This tutorial helped me get rid of all spam my clients were receiving, thank you
very much! Great tutotiral!
From: Reply
You need to send email through port 587 (submission) and not anymore
through port 25.
From: Reply
From: Reply
Spam was really a problem, this has really solved the prob. Thanx loads
From: Reply
From: Reply
From: Reply
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 10 of 18
Reject the request when the HELO or EHLO hostname is malformed. Note:
specify "smtpd_helo_required = yes" to fully enforce this restriction
(without "smtpd_helo_required = yes", a client can simply
skip reject_invalid_helo_hostname by not sending HELO or EHLO).
The invalid_hostname_reject_code specifies the response code for rejected
requests (default: 501).
reject_unknown_helo_hostname (with Postfix < 2.3:
reject_unknown_hostname)
Reject the request when the HELO or EHLO hostname has no DNS A or MX
record.
The unknown_hostname_reject_code parameter specifies the numerical
response code for rejected requests (default: 450).
The unknown_helo_hostname_tempfail_action parameter specifies the
action after a temporary DNS error (default: defer_if_permit). Note: specify
"smtpd_helo_required = yes" to fully enforce this restriction (without
"smtpd_helo_required = yes", a client can simply
skip reject_unknown_helo_hostname by not sending HELO or EHLO).
From: Reply
Thanks, pititis! Just about every Postfix user should benefit from this How-To. The
default configuration is hardly suitable for most real-world scenarios (and I
understand why the Postfix authors have set the defaults as they have; I'm not
blaming them).
While perhaps outside the scope of this How-To, another measure I have taken
that has cut-down on spam-related activity considerably is switching-on fail2ban's
Postfix filter, which essentially bans IP addresses (via iptables) whenever they
elicit a 554 response code. (Actually, I added banning for 504 responses, too, as
no legitimate user should experience one in my particular environment.) This
measure ensures that the same remote hosts do not hammer on Postfix with
illegitimate garbage for extended periods of time.
Thanks again!
From: Reply
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 11 of 18
From: Reply
This is soooooo important! Thank you very much, it solved my problem with
many many fake senders.
From: Reply
You're very welcome! I reported this critical issue, and the ISPConfig team
fixed it in version 3.0.5.4.p2. Link to the bug report:
http://bugtracker.ispconfig.org/index.php?do=details&task_id=3478
From: Reply
You state to place this line in main.cf, but you seem to have prepended the
directive with "postconf -e", which is not valid syntax in the context of main.cf.
The line should be:
postscreen_greet_action = enforce
From: Reply
E-mails with the error 450 4.7.1 Client host rejected: cannot find your
hostname
Do is possible configure some sort of exception to get around this
rule just for specific ip?
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 12 of 18
After a lot of headache and research online about policyd, I've managed to get it
working but in it's "easy" webui way on a Ubuntu server 12.10 ( yea I know not
supported ) but it works on other versions as well.
What I did and from where and why:
There is a module that can be downloaded from apt-get but I hadn't seemed to
see it working with a DB.
So, first get policyd.org I've got 2.0.17 and untar.gz it
wget http://download.policyd.org/v2.0.14/cluebringer-v2.0.14.tar.gz
tar -xzf cluebringer-v2.0.14.tar.gz
cd cluebringer-v2.0.14 and start reading the INSTALLATION file, which is a little
ambiguous but what you need to do next is complete the decencies. for those
( like myself ) sho didn't get what net::server meant or Mail::SPF, I had to
research it. These are modules requested by Pearl, so you need pearl installed...
I've had it from the tutorials of howtoforge.com
next step is to install the deps. of pearl to do this start pearl in shell mode
perl -MCPAN -e shell
and after the initial config ( if you hand't ran it ever it will ask different things just
go with the defaults )
after start writing in this shell ( it doesn't support copy paste so you'll have to do it
by hand and take notice it is CASE SENSITIVE so ... )
Module::Build
q -> this options quits, you have to go again in
perl -MCPAN -e shell
install Net::Server
install Net::CIDR
( this can be installed via apt-get, I didn't know of the pearl installation so I got
them via apt-get, apt-get install libconfig-inifiles-perl and apt-get install libcache-
fastmmap-perl ) if you use this method disregard the next 2 lines
install Config::IniFiles
install Cache::FastMmap
install NetAddr::IP
install Net::DNS::Resolver::Programmable
install NetAddr::IP
install Mail::SPF
the mail::spf if it return
Writing /usr/local/lib/perl/5.8.8/auto/Mail/SPF/.packlist
/usr/bin/make install -- OK
then it's ok
hit q and enter and that's that for now.
The php needs to be at version 5 so you should have it up and running.
Now let's continue with the installation
cd database
mcedit runcmd and put in it ( I use mcedit you can use vi or any other editor )
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 13 of 18
#!/bin/bash
for i in core.tsql access_control.tsql quotas.tsql amavis.tsql checkhelo.tsql
checkspf.tsql greylisting.tsql
do
./convert-tsql mysql $i
done > policyd.mysql
save it and make it executable
chmod +x runcmd
./runcmd
and you get that sql file.
Now for security reasons I didn't allow it to run with my root of the sql so I went
on and created a user and a database...
MySQL -uroot -p
( input your pass )
now create a db and a user and grant privileges so, I choosed as the db policyd
policyddb the user and policydpassword for the password, you can change these
to any other login info :
CREATE DATABASE policyd;
CREATE USER 'policyddb'@'localhost' IDENTIFIED BY 'policydpassword'
GRANT ALL PRIVILEGES ON policyd.* TO 'policyddb'@localhost;
FLUSH PRIVILEGES;
EXIT;
Done now you can continue with the tutorial:
so type MySQL -upolicyddb -p policyd < policyd.mysql
insert the pass,so you have to insert the pass of the policyddb user for me it was
policydpassword
but,for me it gave an error as I have MySQL ver 5.5 and I had to change the
MySQL file.
at each table you need to change at the end from TYPE=InnoDB to
ENGINE=InnoDB and then run again the sql command
MySQL -upolicyddb -p policyd < policyd.mysql
this should work now,so you have to insert the pass of the policyddb user for me
it was policydpassword
copy the conf file
cd..
cp cluebringer.conf /etc/
mkdir /usr/local/lib/policyd-2.0
cp -r cbp /usr/local/lib/policyd-2.0/
cp cbpadmin /usr/local/bin/
cp cbpolicyd /usr/local/sbin/
install the webui meaning copy the contents of the webui to a new folder
in /var/www/ for example and go to /etc/apache2/ and change the .conf file
accordingly to point to that new folder and now configure the
file /var/www/policyd/webui/includes/config.php and set the user and the pass for
the newly created user in sql
do the same in /etc/cluebringer.conf
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 14 of 18
# CheckSPF module
[CheckSPF]
enable=0
#SENDERMSGLIMIT=1
#SENDERRCPTLIMIT=360000
# Quotas module
[Quotas]
enable=1
and now you should save the file and start cbpolicyd if everything is ok it should
not give any error at launch and you can see the log file with tail
-f /var/log/cbpolicyd.log
Now go to postfix config main.cf and this is very important to do in this order !!!
at smtpd_recipient_restrictions add the first field to be the ruleset to send it to
policyd. The order is very important so I have like it to work
smtpd_recipient_restrictions =
check_policy_service inet:127.0.0.1:10031,
permit_mynetworks,
...
after this add the next line
smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 15 of 18
after that continue with the regular main.cf config. you do not need to modify
anything in the master.cf
Now the next step is a pickle and it gave me headaches to try to make it work...
so...
go the to webbrowser and set the rules for policyd.
www.domain.com/policyd/webui/
there is no login info now the access control you can activate to create special
rules of not sending from one domain to another you need to make it enable in
cluebringer.conf
Now to set the limits you need to do the following:
go to Policies-> main -> action -> add
set a name, a priority ( you can go with 50 )and a description
go with submit query
back to policies ( up button ) select the added policy action change change
disabled to no save it go back
Select again the policy action -> members
here you add the members that are added in the policies groups, you can go with
source with %internal_domains and destination !%internal_domains meaning the
you can send from your domains to anywere and the policy to count.
next go to policies -> groups -> and change %internal_domains and add the
domains that are on your server with the @domain.com format. add as many as
you want.
Next go to quotas -> action -> add
give a name, track I set sender user@domain ( so it logs a user of a domain and
this is policy to be used)
period in seconds ( I think, need further testing, on the main site there a few
versions with different versions but I think it's seconds ), link policy choose the
policy you've created earlier, verdict, reject, data, input a text to give at the
access denied and a comment if you like, save it and now select the quota ->
action -> change -> activate it ( disable set it to no )
go back select it again -> action -> limits -> action -> add
here you add the number of messager to be sent in that specific time period
provided earlier. To test it out you can set the message counter to 1 and play with
your domains. If it gives an error after the first send it is ok and you've completed
it successfully.
The tutorial provided online by policyd are a little bit confusing but after a time
you will understand them better to create a more complex settings, but this is for
those users who just want to limit the amount of emails to be sent and prevent
blacklisting a domain cause of a stupid user that hasn't got a antivirus and goes
on strange sites and gets infected with a spam bot...
Cheers and I hope you find usefull my tutorial...
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 16 of 18
Are these techniques added in ispcinfig 3.1 or do I still noeed to add them?
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 17 of 18
Can someone confirm that this tutorial is still valid as I have problems with my
mail after applying the changes on my Ubuntu Perfect Server 16.04? The
tutorial worked fine with 14.04.
My mail server just stops working if all changes are implimented - also I have
extra entries in my Helo restrictions:
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks,
check_helo_access regexp:/etc/postfix/helo_access, reject_invalid_hostname,
reject_non_fqdn_hostname, check_helo_access
regexp:/etc/postfix/blacklist_helo
Should these entries be replaced or retained?
Does it matter what line in main.cf the following is placed? - then I can
continue the tutortorial and see at what stage the mail server stops working.
strict_rfc821_envelopes = yes
Tutorial Info
Author: pititis
Tags:
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18
Hardening Postfix For ISPConfig 3 Page 18 of 18
40.2k Followers
Popular Tutorials
https://www.howtoforge.com/hardening-postfix-for-ispconfig-3 02-May-18