In part 4Â of this series I configured Microsoft Exchange to work with nginx.
In this final part of the series I tidy up the loose ends so it can be put live.
Other articles in the series:
- Installing and configuring keepalived
- Installing nginx+
- Configuring nginx+ for Microsoft Exchange
- Configuring Microsoft Exchange
- Tidying up
The first thing to configure is synchronise the nginx+ configs between both VMs. Â To do this we will use rsync over SSH.
Create a new user on both VMs to run the rsync copy. Â Insert your own password as desired:
useradd -s /bin/bash -p $(echo mysecretpassword | openssl passwd -1 -stdin) sa_copyconf
On HA1, login as the user and create the SSH keys:
mkdir .ssh
chmod 700 .ssh
cd .ssh
ssh-keygen -t rsa -N '' -b 2048
Accept the default file name for the private key. Add the public key to the list of authorized keys:
cat id_rsa.pub > authorized_keys2
chmod 644 authorized_keys2
Copy the public key over to HA2:
cat id_rsa.pub | ssh ha2.mail.mdb-lab.com "mkdir .ssh && chmod 700 .ssh && cat > .ssh/authorized_keys2"
On HA2, login is as sa_copyconf and set the permissions to /home/sa_copyconf/.ssh/authorized_keys2:
chmod 644 /home/sa_copyconf/.ssh/authorized_keys2
Also on HA2, copy across the id_rsa file from HA1 and place in .ssh:
sftp ha1.mail.mdb-lab.com:.ssh/id_rsa .ssh/id_rsa
On each VM, add permission to /etc/nginx/ for sa_copyconf:
setfacl -m u:sa_copyconf:rwx /etc/nginx/
Next, install rsync (if it isn’t already):
yum install rsync -y --nogpgcheck
Create the following script on each host (replace the hostname as needed – on HA1, it should reference HA2 and vice-versa):
cat <<EOF> /home/sa_copyconf/copyconf.sh
#!/bin/bash
rsync -avuz -e ssh ha2.mail.mdb-lab.com:/etc/nginx/nginx.conf /etc/nginx
EOF
Make the script executable:
chmod +x /home/sa_copyconf/copyconf.sh
Add a cron job to run the script every five minutes:
crontab -l | { cat; echo "*/5 * * * * /home/sa_copyconf/copyconf.sh"; } | crontab -
To test, delete the config on HA2:
rm -f /etc/nginx/nginx.conf
Wait ten minutes and the config should now reappear on HA2. To check this:
diff /etc/nginx/nginx.conf <(ssh ha1.mail.mdb-lab.com 'cat /etc/nginx/nginx.conf')
Next, restrict VRRP (the protocol keepalived uses) to the IPs of the two hosts. On HA1:
iptables -D INPUT -p 112 -j ACCEPT
iptables -I INPUT -p 112 -s 172.17.80.12 -j ACCEPT
service iptables save
On HA2:
iptables -D INPUT -p 112 -j ACCEPT
iptables -I INPUT -p 112 -s 172.17.80.11 -j ACCEPT
service iptables save
Test this by pausing the VM currently owning the cluster addresses and verifying they have transferred.
Finally, SELinux needs to be modified so nginx can run. Â To demonstrate this, enable SELinux:
setenforce 1
Then restart the nginx service:
service nginx restart
You will get the following error:
nginx: [emerg] bind() to 172.17.80.13:135 failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed
This is because with SELinux enabled nginx is unable to bind to tcp/25, tcp/135 and tcp/139. To work around this:
grep nginx /var/log/audit/audit.log | audit2allow -m nginx > nginx.te
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
semodule -i nginx.pp
To test, restart the service again:
service nginx restart
nginx should now start without issue. Â On each VM run the following as root:
sudo sed -i "/SELINUX=permissive/c\SELINUX=enforcing" /etc/selinux/config
I would like to thank the technical guys at Nginx for help with the SELinux component.  More information regarding this can be found on their blog at http://nginx.com/blog/nginx-se-linux-changes-upgrading-rhel-6-6/.
Nick Shadrin at Nginx has also put together a comprehensive Exchange configuration guide on their site. Â I highly recommend checking it out –Â http://nginx.com/blog/load-balancing-microsoft-exchange-nginx-plus-r6/.
Now that mainstream support for Microsoft Threat Management Gateway 2010 has ended (extended support is available till 14 April 2020), there is an opportunity to leverage technologies such as nginx+ to load-balance and publish Microsoft Exchange 2013 externally when the time comes.  If there is, I’ll be sure to document it!
In this article we have provided a method of syncing the configs, tightened security and re-enabled SELinux.
That completes the series on how to configure nginx+Â to load-balance Microsoft Exchange.
51.507351
-0.127758