<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>amdavidson</title>
	<atom:link href="https://amdavidson.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://amdavidson.com</link>
	<description></description>
	<lastBuildDate>Wed, 18 Mar 2015 13:23:10 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.1</generator>
	<item>
		<title>Winston Salem</title>
		<link>https://amdavidson.com/2015/02/winston-salem/</link>
		<comments>https://amdavidson.com/2015/02/winston-salem/#comments</comments>
		<pubDate>Sat, 14 Feb 2015 01:27:47 +0000</pubDate>
		<dc:creator><![CDATA[Andrew]]></dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">https://amdavidson.com/?p=2607</guid>
		<description><![CDATA[We were in Winston Salem a couple weeks ago for a quick visit. Only caught a couple shots when I was walking around one morning.<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2015%2F02%2Fwinston-salem%2F&amp;action_name=Winston+Salem&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
				<content:encoded><![CDATA[<p><em><a href="https://amdavidson.com/?attachment_id=2609"><img src="https://amdavidson.com/wp-content/uploads/2015/02/Winston-Salem-2-650x488.jpg" alt="OLYMPUS DIGITAL CAMERA" /></a></em></p>
<p>We were in Winston Salem a couple weeks ago for a quick visit. Only caught a couple shots when I was walking around one morning.</p>
<p><em><a href="https://amdavidson.com/?attachment_id=2608"><img src="https://amdavidson.com/wp-content/uploads/2015/02/Winston-Salem-1-650x488.jpg" alt="OLYMPUS DIGITAL CAMERA" /></a></em></p>
<p><em><a href="https://amdavidson.com/?attachment_id=2610"><img src="https://amdavidson.com/wp-content/uploads/2015/02/Winston-Salem-3-650x488.jpg" alt="OLYMPUS DIGITAL CAMERA" /></a></em></p>
<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2015%2F02%2Fwinston-salem%2F&amp;action_name=Winston+Salem&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
			<wfw:commentRss>https://amdavidson.com/2015/02/winston-salem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fair Hill Farmhouse</title>
		<link>https://amdavidson.com/2015/02/fair-hill-farmhouse/</link>
		<comments>https://amdavidson.com/2015/02/fair-hill-farmhouse/#comments</comments>
		<pubDate>Sun, 08 Feb 2015 18:19:09 +0000</pubDate>
		<dc:creator><![CDATA[Andrew]]></dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">https://amdavidson.com/?p=2601</guid>
		<description><![CDATA[An old farmhouse still standing on the Fair Hill Natural Resource Management Area in Elkton, Maryland.<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2015%2F02%2Ffair-hill-farmhouse%2F&amp;action_name=Fair+Hill+Farmhouse&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
				<content:encoded><![CDATA[<p><em><a href="https://amdavidson.com/2015/02/fair-hill-farmhouse/img_0388/"><img src="https://amdavidson.com/wp-content/uploads/2015/02/IMG_0388-650x488.jpg" alt="IMG_0388" /></a></em></p>
<p>An old farmhouse still standing on the Fair Hill Natural Resource Management Area in Elkton, Maryland.</p>
<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2015%2F02%2Ffair-hill-farmhouse%2F&amp;action_name=Fair+Hill+Farmhouse&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
			<wfw:commentRss>https://amdavidson.com/2015/02/fair-hill-farmhouse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your Own Personal Email Server</title>
		<link>https://amdavidson.com/2015/01/your-own-personal-email-server/</link>
		<comments>https://amdavidson.com/2015/01/your-own-personal-email-server/#comments</comments>
		<pubDate>Mon, 26 Jan 2015 00:22:00 +0000</pubDate>
		<dc:creator><![CDATA[Andrew]]></dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://amdavidson.com/?p=1732</guid>
		<description><![CDATA[Hosting This guide is targeted at creating the ultimate personal email server. This would work on most any server that you have root access to, but I recommend hosting from one of the better VPS providers. I have personally hosted servers at Ramnode, Linode, and most recently Digital Ocean. So go grab yourself a VPS. [&#8230;]<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2015%2F01%2Fyour-own-personal-email-server%2F&amp;action_name=Your+Own+Personal+Email+Server&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
				<content:encoded><![CDATA[<h3>Hosting</h3>
<p>This guide is targeted at creating the ultimate personal email server. This would work on most any server that you have root access to, but I recommend hosting from one of the better VPS providers. I have personally hosted servers at <a href="http://ramnode.com">Ramnode</a>, <a href="http://linode.com">Linode</a>, and most recently <a href="http://digitalocean.com">Digital Ocean</a>.</p>
<p>So go grab yourself a VPS. A small one with 512MB of memory should be fine, if you want to add virus scanning with ClamAV expect to need at least 1GB. Setting up the VPS is outside of the scope of this tutorial and the remainder is based on using Debian as the OS, if you use something other than a Debian based distribution you&#8217;ll have to adjust the file locations and possibly some of the settings. Proceed at your own risk.</p>
<h3>Packages</h3>
<p>The first thing I recommend doing is getting your system up to date.</p>
<pre><code>sudo apt-get update
sudo apt-get upgrade
</code></pre>
<p>Then let&#8217;s install some good stuff.</p>
<p>This next command will install Postfix to communicate with email servers across the web, Dovecot to manage our email boxes on the server, Spamassassin and some plugins to avoid filling our inbox with junk, OpenDKIM to prove to people that we&#8217;re not sending junk, Nginx / PHP5 and Roundcube so that we can have a web interface to our mail, and finally MySQL to satisfy our database needs. You can modify these selections, but they&#8217;re all required to complete the rest of the tutorial as written.</p>
<pre><code>sudo apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-mysql \
    dovecot-lmtpd dovecot-sieve dovecot-managesieved dovecot-antispam \
    ntp spamassassin spamc razor pyzor opendkim opendkim-tools postgrey fail2ban nginx \
    php5 php5-fpm mysql-server roundcube roundcube-plugins roundcube-plugins-extra
</code></pre>
<p>There will be some packages that must be configured.</p>
<p>For <code>postfix</code> configure the server as an <code>Internet Site</code>, and ensure that the hostname is correct. I chose not to create self-signed certificates because I prefer to use certificates that are externally authenticated and not get that little pop-up when I access the server.</p>
<p>For <code>mysql-server</code> choose a strong root password. You will not have to enter it often once the server is setup, so it&#8217;s not necessary to choose something memorable if you use a good password manager.</p>
<p>For <code>roundcube</code> you&#8217;ll need to configure a database, this is easy as you&#8217;ll be able to do it with <code>db-config</code> as part of the package setup. Use</p>
<h3>Database Setup</h3>
<p>Log into the database as the root user:</p>
<pre><code>mysql -u root -p
</code></pre>
<p>Create a database and user we can use:</p>
<pre><code>CREATE DATABASE `mailserver`;
GRANT SELECT ON `mailserver`.* to 'mailuser'@'localhost' IDENTIFIED BY 'mystr0ngp4ssw0rd';
FLUSH PRIVILEGES;
</code></pre>
<p>Still as the root user, switch into the <code>mailserver</code> database:</p>
<pre><code>USE `mailserver`;
</code></pre>
<p>First (and it needs to be first) create a table of domains that we will host on this mail server</p>
<pre><code>CREATE TABLE `domains` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `domain` (`domain`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</code></pre>
<p>Now we need to create a table where we will store the users for the mail server</p>
<pre><code>CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`email` VARCHAR(120) NOT NULL,
`password` VARCHAR(106) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (`domain_id`) REFERENCES domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</code></pre>
<p>It often happens that we need a virtual alias address to point to a real address. We can support that with an alias table.</p>
<pre><code>CREATE TABLE `aliases` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`source` varchar(120) NOT NULL,
`destination` varchar(120) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</code></pre>
<p>Ok now that we have the three tables set up we can add our first datasets.</p>
<p>Let&#8217;s add a domain.</p>
<pre><code>INSERT INTO `mailserver`.`domains` (`domain`)
VALUES ('example.com');
</code></pre>
<p>If you wanted to insert additional, you can repeat that with a different domain.</p>
<pre><code>INSERT INTO `mailserver`.`domains` (`domain`)
VALUES ('example2.org');
</code></pre>
<p>Now let&#8217;s create a user. Note: you must make sure the <code>domain_id</code> matches the domain in the email address of the user and the associated domain in the <code>domains</code> table.</p>
<pre><code>INSERT INTO `mailserver`.`users` (`domain_id`, `email`, `password`)
VALUES ('1', 'user@example.com', ENCRYPT('examplepassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))));
</code></pre>
<p>Finally let&#8217;s add an alias. In this case the <code>domain_id</code> must match the <code>domain_id</code> of the alias&#8217;s domain in the <code>domains</code> table, not the destination domain.</p>
<pre><code>INSERT INTO `mailserver`.`aliases` (`domain_id`, `source`, `destination`)
VALUES (, '1', 'alias@example.com', 'email1@example.com');
</code></pre>
<h3>SSL Certificates</h3>
<p>There is no way that the ultimate personal email server is going to let you sling your passwords and private information around without some sort of encryption so we&#8217;re going to need some SSL certificates.</p>
<p>Getting those is outside the scope of this tutorial. My recommendation is to go to your local neighborhood domain registrar and see what they have on offer. You can often find cheap SSL certificates that will make this a lot easier.</p>
<p>We&#8217;re going to place ours in <code>/etc/ssl/private</code> and call the certificate <code>example.com.crt</code> and call the key <code>example.com.key</code>. You&#8217;ll also likely need to create a certificate with the full authority chain (if you forget the order should be example.com.crt, then each certificate going up the chain), call that file <code>example.com.chain.crt</code>.</p>
<h3>Postfix Configuration</h3>
<p>Let&#8217;s make backups of the original <code>postfix</code> configuration files, just in case&#8230;</p>
<pre><code>sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
sudo cp /etc/postfix/master.cf /etc/postfix/master.cf.orig
</code></pre>
<p>We need to set up some configuration files that will allow <code>postfix</code> to reference the MySQL database for it&#8217;s user lookups.</p>
<p><code>sudo vim /etc/postfix/mysql-virtual-domains.conf</code></p>
<pre><code>user = mailuser
password = mystr0ngp4ssw0rd
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM domains WHERE domain='%s'
</code></pre>
<p><code>sudo vim /etc/postfix/mysql-virtual-users.conf</code></p>
<pre><code>user = mailuser
password = mystr0ngp4ssw0rd
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM users WHERE email='%s'
</code></pre>
<p><code>sudo vim /etc/postfix/mysql-virtual-aliases.conf</code></p>
<pre><code>user = mailuser
password = mystr0ngp4ssw0rd
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM aliases WHERE source='%s'
</code></pre>
<p>Edit <code>main.cf</code> to have these changes</p>
<p>In the TLS section:</p>
<pre><code>#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_cert_file=/etc/ssl/private/example.com.chain.crt
smtpd_tls_key_file=/etc/ssl/private/example.com.key
smtpd_tls_auth_only = yes
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unauth_destination,
    check_policy_service inet:127.0.0.1:10023
</code></pre>
<p>The last line in that configuration is what sets up Postgrey as a filter for your email messages.</p>
<p>Change <code>mydestination</code> to <code>localhost</code>:</p>
<pre><code>#mydestination = example.com, hostname.example.com, localhost.example.com, localhost
mydestination = localhost
</code></pre>
<p>Let&#8217;s reject unwanted mail rather than re-trying later:</p>
<pre><code>#smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_relay_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination
</code></pre>
<p>IPV6 causes trouble with sending messages to Gmail at times. If you don&#8217;t need to use it, let&#8217;s disable it</p>
<pre><code>#inet_protocols = all
inet_protocols = ipv4
</code></pre>
<p>Let&#8217;s enable email tagging so you can use addresses like <code>email1+amazon@example.com</code>, make sure this line is in the configuration:</p>
<pre><code>recipient_delimiter = +
</code></pre>
<p>We need to set up a milter for OpenDKIM to sign our emails. This is a good measure to authenticate our messages to avoid getting them marked as SPAM. We&#8217;ll put this in now and set up OpenDKIM later.</p>
<pre><code>milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
</code></pre>
<p>Add these line to the end of the file:</p>
<pre><code>virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-domains.conf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-users.conf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-aliases.conf
</code></pre>
<p>Now test what we&#8217;ve done</p>
<p>To check the domain lookup enter the following command, it should return <code>1</code>.</p>
<pre><code>postmap -q example.com mysql:/etc/postfix/mysql-virtual-domains.conf
</code></pre>
<p>To check the email lookup enter the following command, it should again return <code>1</code>.</p>
<pre><code>postmap -q user@example.com mysql:/etc/postfix/mysql-virtual-users.conf
</code></pre>
<p>Finally, to check alias lookup enter the following command, this time it should return the destination address.</p>
<pre><code>postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-aliases.conf
</code></pre>
<p>If any of those do not function as expected, go back and check through your work before continuing.</p>
<p>Now let&#8217;s edit <code>master.cf</code> to make it more compatible with outside servers and to set up postfix to work with <code>spamassassin</code>.</p>
<p>First, let&#8217;s allow access on a couple secure ports (587 and 465). Locate and uncomment these two lines:</p>
<pre><code>submission inet n       -       -       -       -       smtpd

smtps     inet  n       -       -       -       -       smtpd
</code></pre>
<p>Now let&#8217;s add support for <code>spamassassin</code>, find the <code>smtp</code> line and add a content filter to all incoming mail on the SMTP port:</p>
<pre><code>smtp      inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
</code></pre>
<p>At the bottom of the file, add a content filter that matches that line:</p>
<pre><code>spamassassin unix -     n       n       -       -       pipe
  user=spamd argv=/usr/bin/spamc -f -e
  /usr/sbin/sendmail -oi -f ${sender} ${recipient}
</code></pre>
<p>Now restart <code>postfix</code>:</p>
<pre><code>sudo service postfix restart
</code></pre>
<h3>Setup Spamassassin</h3>
<p>First we&#8217;ll create a user that&#8217;s going to run the spam filter</p>
<pre><code>sudo adduser spamd --home /var/spamd --disabled-login
</code></pre>
<p>Now let&#8217;s edit the file that starts up spamassassin to have some more ideal settings, <code>vim /etc/default/spamassassin</code></p>
<p>Make sure it is enabled:</p>
<pre><code>ENABLED=1
</code></pre>
<p>And update the folder it uses, add a location for the PID file, and enable CRON updates:</p>
<pre><code>SPAMD_HOME="/var/spamd/"
OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log"

#PIDFILE="/var/run/spamd.pid"
PIDFILE="${SPAMD_HOME}spamd.pid"

#CRON=0
CRON=1
</code></pre>
<p>Now we can edit the configuration file, <code>sudo vim /etc/spamassassin/local.cf</code></p>
<pre><code>rewrite_header Subject *** SPAM _SCORE_ ***
report_safe         0
required_score      4.0
use_bayes           1
bayes_auto_learn    1
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
skip_rbl_checks     0
use_razor2          1
use_pyzor           1
</code></pre>
<p>Now restart the <code>spamassassin</code> service:</p>
<pre><code>sudo service spamassassin restart
</code></pre>
<h3>Setup OpenDKIM</h3>
<p>OpenDKIM is a tool that will allow postfix to sign your emails with a calculated header. When combined with a DNS record that matches the calculated header, the recipient can be confident they are receiving email from a sender authorized for that domain and that the email has not been forged.</p>
<p>First we need to generate some signing keys to use.</p>
<pre><code>sudo mkdir -p /etc/opendkim/keys
cd /etc/opendkim/keys
sudo opendkim-genkey -s example.com -d example.com
</code></pre>
<p>You&#8217;ll want to read out the contents of the key files so that you can add them as a DNS record.</p>
<p><code>sudo cat /etc/opendkim/keys/example.com.txt</code></p>
<pre><code>example.com._domainkey  IN  TXT ( "`v=DKIM1; k=rsa; "
      "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB..." )  ; ----- DKIM key example.com for example.com
</code></pre>
<p>From that you&#8217;ll need to add a <code>TXT</code> DNS record for your domain. The name should be <code>example.com._domainkey</code> and the value should be <code>v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB...</code>.</p>
<p>Now we&#8217;ll create a table that allows OpenDKIM to know which keys to use for which domain. It is recommended that you use a different key for each domain that you host. For some reason it takes two files to do this.</p>
<p><code>sudo vim /etc/opendkim/KeyTable</code></p>
<pre><code>example.com._domainkey.example.com example.com:example.com:/etc/opendkim/keys/example.com.private
</code></pre>
<p><code>sudo vim /etc/opendkim/SigningTable</code></p>
<pre><code>example.com example.com._domainkey.example.com
</code></pre>
<p>Now let&#8217;s tell OpenDKIM about the files we created, and tell it to open a port for us to use. This port <em>must</em> match the port we put into the <code>postfix</code> milter configuration earlier.</p>
<p><code>sudo vim /etc/opendkim.conf</code></p>
<pre><code>Socket inet:8891@localhost
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
</code></pre>
<p>Fix some permissions and a quick restart for both <code>opendkim</code> and <code>postfix</code>.</p>
<pre><code>sudo chown -R opendkim:opendkim /etc/opendkim
sudo service opendkim restart
sudo service postfix restart
</code></pre>
<h3>Setup SPF Record</h3>
<p>While you&#8217;re updating your DNS records for the DKIM signing, you should also make sure to add an SPF record. It will tell recipients which servers are authorized to send email on your behalf. This is super important to get right if you want Gmail to ever receive your emails.</p>
<p>As this is a personal email server, and we&#8217;re setting it up both to receive and to send email, the easiest SPF record is just to allow any server set up as an MX record to send. To do that, just add a TXT record with these contents:</p>
<pre><code>v=spf1 mx -all
</code></pre>
<h3>Setup DMARC Record</h3>
<p>DMARC is a way for you to inform receiving servers what to do with email they receive that looks like it comes from you but does not match the SPF and DKIM records you have set up.</p>
<p>Initially, I would just set this up so that they alert you and you can see how you&#8217;re doing.</p>
<p>To do that, we will again add a TXT DNS record with these contents:</p>
<pre><code>v=DMARC1; p=none; rua=mailto:postmaster@example.com
</code></pre>
<p>Once you have that settled and your email seems to be working nicely, you can start telling email servers to be more and more strict about it. I won&#8217;t go into detail as Google took the time to <a href="https://support.google.com/a/answer/2466563?hl=en">clearly explain it</a>.</p>
<h3>Setup PTR</h3>
<p>The final thing we&#8217;ll want to do is ensure that our PTR / rDNS records are set up correctly.</p>
<p>This is done differently with every VPS provider so check with yours to make sure it exactly matches the domain that <code>postfix</code> is configured with.</p>
<h3>Setup Dovecot</h3>
<p>OK, back to the server setup. We need to configure Dovecot to properly act as our IMAP host. First things first, let&#8217;s backup the configuration files we&#8217;re going to change.</p>
<pre><code>sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.org
sudo cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
sudo cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
sudo cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
sudo cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
sudo cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
</code></pre>
<p>Let&#8217;s add a quick line to the main dovecot configuration file.</p>
<p><code>sudo vim /etc/dovecot/dovecot.conf</code></p>
<pre><code>protocols = imap lmtp
</code></pre>
<p>Now we&#8217;ll edit the <code>10-mail.conf</code> file, find the line starting with <code>mail_location</code> and change it to create proper maildir for each of the users.</p>
<p><code>sudo vim /etc/dovecot/conf.d/10-mail.conf</code></p>
<pre><code>mail_location = maildir:/var/mail/vhosts/%d/%n/maildir
</code></pre>
<p>Let&#8217;s make <code>dovecot</code> a bit more secure. Find these lines and make sure they match.</p>
<p><code>sudo vim /etc/dovecot/conf.d/10-auth.conf</code></p>
<pre><code>disable_plaintext_auth = yes
...
auth_mechanisms = plain login
...
#!include auth-system.conf.ext
...
!include auth-sql.conf.ext
</code></pre>
<p>Now that dovecot is looking to sql to locate user information we need to tell it how to do that. Edit just one line in the <code>userdb {</code> section of the file.</p>
<p><code>sudo vim /etc/dovecot/conf.d/auth-sql.conf.ext</code></p>
<pre><code>userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
  ...
...
</code></pre>
<p>Now edit the MySQL parameters in the <code>dovecot-sql.conf.ext</code> file.</p>
<p><code>sudo vim /etc/dovecot/dovecot-sql.conf.ext</code></p>
<pre><code>...
driver = mysql
...
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mystr0ngp4ssw0rd
...
default_pass_scheme = SHA512-CRYPT
...
password_query = SELECT email as user, password FROM users WHERE email='%u';
...
</code></pre>
<p>Setup how dovecot controls access in <code>10-master.conf</code></p>
<p><code>sudo vim /etc/dovecot/conf.d/10-master.conf</code></p>
<pre><code>...
service lmtp {
   unix_listener /var/spool/postfix/private/dovecot-lmtp {
       mode = 0600
       user = postfix
       group = postfix
   }
   ...
...
service auth {

  unix_listener /var/spool/postfix/private/auth {
  mode = 0666
  user = postfix
  group = postfix
  }

  unix_listener auth-userdb {
  mode = 0600
  user = vmail
  #group =
  }

  ...
  user = dovecot
}
...
service auth-worker {
  ...
  user = vmail
}
...
</code></pre>
<p>Next, tell Dovecot which SSL certificates to use and prevent use of old SSL protocols.</p>
<p><code>sudo vim /etc/dovecot/conf.d/10-ssl.conf</code></p>
<pre><code>...
ssl = required
...
ssl_cert = &amp;lt;/etc/ssl/private/example.com.crt
ssl_key = &amp;lt;/etc/ssl/private/example.com.key
...
ssl_protocols = !SSLv2 !SSLv3
...
</code></pre>
<p>Now we need to create the correct users and set some file permissions.</p>
<pre><code>sudo addgroup vmail --gid 5000
sudo adduser vmail --uid 5000 --gid 5000 --disabled-login --home /var/mail
sudo chown -R vmail:vmail /etc/dovecot /var/mail
sudo chmod -R o-rwx /etc/dovecot /var/mail
</code></pre>
<p>And finally, give dovecot a restart</p>
<p><code>sudo service dovecot restart</code></p>
<h3>Setup Dovecot Plugins</h3>
<h4>dovecot-sieve</h4>
<p>First we have to enable the <code>dovecot-sieve</code> plugin</p>
<p><code>sudo vim /etc/dovecot/conf.d/20-lmtp.conf</code></p>
<pre><code>...
protocol lmtp {
  ...
  mail_plugins = $mail_plugins sieve
}
...
</code></pre>
<p>Let&#8217;s setup a global mail filter folder and sieve file so that users SPAM emails are properly quarantined.</p>
<p><code>sudo mkdir -p /var/lib/dovecot/sieve/</code></p>
<p><code>sudo vim /var/lib/dovecot/sieve/default.sieve</code></p>
<pre><code>require [&amp;quot;fileinto&amp;quot;,&amp;quot;imap4flags&amp;quot;];
if header :contains &amp;quot;X-Spam-Flag&amp;quot; &amp;quot;YES&amp;quot; {
  setflag &amp;quot;\\seen&amp;quot;;
  fileinto &amp;quot;Spam&amp;quot;;
} else {
  keep;
}
</code></pre>
<p>Now let&#8217;s compile those rules.</p>
<p><code>sudo sievec /var/lib/dovecot/sieve/default.sieve</code></p>
<p>And finally we&#8217;ll make sure that Dovecot can see that folder</p>
<p><code>sudo chown -R vmail:vmail /var/lib/dovecot</code></p>
<p>Now we&#8217;ll tell Dovecot to use those rules before user rules.</p>
<p><code>sudo vim /etc/dovecot/conf.d/90-plugin.conf</code></p>
<pre><code>...
plugin {
  ...
  sieve_before = /var/lib/dovecot/sieve/default.sieve
  ...
}
...
</code></pre>
<h4>dovecot-antispam</h4>
<p>Now that we have our mail properly filing away into a Spam folder, we&#8217;ll want to be able to better train our Spamassassin bayesian filtering by moving email into or out of that folder. For that we&#8217;ll lean on the <code>dovecot-antispam</code> plugin and a quick script.</p>
<p>Let&#8217;s make that script real quick:</p>
<p><code>sudo vim /usr/local/bin/sa-learn-pipe.sh</code></p>
<pre><code>#!/bin/bash

echo /usr/bin/sa-learn $* /tmp/sendmail-msg-$$.txt echo &amp;quot;$$-start ($*)&amp;quot; &amp;gt;&amp;gt; /tmp/sa-learn-pipe.log

/usr/bin/sa-learn $* /tmp/sendmail-msg-$$.txt

rm -f /tmp/sendmail-msg-$$.txt

echo &amp;quot;$$-end&amp;quot; &amp;gt;&amp;gt; /tmp/sa-learn-pipe.log

exit 0
</code></pre>
<p>Make it executable</p>
<p><code>sudo chmod +x /usr/local/bin/sa-learn-pipe.sh</code></p>
<p>Now we integrate it into Dovecot</p>
<p><code>sudo vim /etc/dovecot/conf.d/90-plugin.conf</code></p>
<pre><code>...
plugin {
  ...
  antispam_trash_ignorecase = trash;deleted*
  antispam_spam_ignorecase = spam;junk*
  antispam_mail_sendmail = /usr/bin/sa-learn-pipe.sh
  antispam_mail_spam  = --spam
  antispam_mail_notspam  = --ham
  ...
}
...
</code></pre>
<h4>dovecot-lucene</h4>
<p><em>Note:</em> You must be running Debian Jessie for this to work. I know&#8230; Debian <code>testing</code> on a server! Scary! At the time of writing, this is a non-trivial installation and I won&#8217;t go into detail of what I had to do to install it (hint: install everything on Wheezy, then upgrade). If you want to run <code>stable</code> and still want full-text search you can install <code>dovecot-solr</code> following <a href="http://sealedabstract.com/code/nsa-proof-your-e-mail-in-2-hours/">this guide</a>.</p>
<p>We&#8217;re going to use the dovecot-lucene for our full-text search. This should be just as good and way lighter weight than dovecot-solr. No java necessary!</p>
<p>First we&#8217;ll install it:</p>
<p><code>sudo apt-get install dovecot-lucene</code></p>
<p>Let&#8217;s just make sure it is configured properly:</p>
<p><code>sudo vim /etc/dovecot/conf.d/90-plugin.conf</code></p>
<pre><code>...
plugin {
  ...
  fts = lucene
  fts_lucene = whitespace_chars=@.
  ...
}
...
</code></pre>
<p>and that&#8217;s it! Much easier than previous FTS solutions.</p>
<p>Finally, now that all of our plugins are configured, we&#8217;ll restart <code>dovecot</code></p>
<pre><code>sudo service dovecot restart
</code></pre>
<h3>Setup Nginx</h3>
<p>We&#8217;re going to set up Nginx to host a webmail application for when we&#8217;re not near an IMAP client.</p>
<p>Let&#8217;s generate an key to use for elliptic curves. This takes forever&#8230;</p>
<p><code>sudo openssl dhparam -outform pem -out /etc/ssl/private/dhparam2048.pem 2048</code></p>
<p>Let&#8217;s blow out the entire <code>default</code> file and replace it with this:</p>
<p><code>sudo vim /etc/nginx/sites-enabled/default</code></p>
<pre><code>server {
    listen 80;
    server_name hostname.example.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl spdy;
    server_name hostname.example.com;

    root /usr/share/roundcube;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location ~ ^/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
        deny all;
    }

    location ~ ^/(bin|SQL) {
        deny all;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }

    ssl_certificate /etc/ssl/private/example.com.chain.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    add_header Strict-Transport-Security 'max-age=31536000';

    ssl_prefer_server_ciphers on;
    ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !MD5 !EXP !DSS !PSK !SRP !kECDH !CAMELLIA !RC4 !SEED';

    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;

    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
    keepalive_timeout   70;
    ssl_buffer_size 1400;

    spdy_headers_comp 0;

    ssl_dhparam /etc/ssl/private/dhparam2048.pem;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=86400;
    resolver_timeout 10;
    ssl_trusted_certificate /etc/ssl/private/example.com.chain.crt;
}
</code></pre>
<p>Now we need to quickly restart Nginx:</p>
<p><code>sudo service nginx restart</code></p>
<h3>Setup Roundcube</h3>
<p><code>sudo vim /etc/roundcube/main.inc.php</code></p>
<pre><code>...
$rcmail_config['default_host'] = 'tls://localhost';
...
$rcmail_config['smtp_server'] = 'tls://localhost';
...
$rcmail_config['smtp_user'] = '%u';
...
$rcmail_config['smtp_pass'] = '%p';
...
$rcmail_config['plugins'] = array('managesieve');
...
</code></pre>
<h3>Optional: Setup Logwatch</h3>
<p>Finally we&#8217;ll have logwatch email our logs to us so we can see how the server is performing.</p>
<p>First install logwatch:</p>
<p><code>sudo apt-get install logwatch</code></p>
<p>Then edit the <code>cron.daily</code> file so that it emails the logs to the account you created.</p>
<p><code>sudo vim /etc/cron.daily/00logwatch</code></p>
<pre><code>...
logwatch --mail --mailto email1@example.com
...
</code></pre>
<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2015%2F01%2Fyour-own-personal-email-server%2F&amp;action_name=Your+Own+Personal+Email+Server&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
			<wfw:commentRss>https://amdavidson.com/2015/01/your-own-personal-email-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Glass Beads</title>
		<link>https://amdavidson.com/2014/12/glass-beads/</link>
		<comments>https://amdavidson.com/2014/12/glass-beads/#comments</comments>
		<pubDate>Wed, 31 Dec 2014 02:05:51 +0000</pubDate>
		<dc:creator><![CDATA[Andrew]]></dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://amdavidson.com/?p=1744</guid>
		<description><![CDATA[Incomparable quality Hand blown&#8230; Hand cut<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F12%2Fglass-beads%2F&amp;action_name=Glass+Beads&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
				<content:encoded><![CDATA[<p><a href="https://amdavidson.com/2014/12/glass-beads/img_0266-jpg/"><img src="https://amdavidson.com/wp-content/uploads/2014/12/IMG_0266-650x867.jpg" alt="IMG_0266.JPG" /></a></p>
<p>Incomparable quality Hand blown&#8230; Hand cut</p>
<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F12%2Fglass-beads%2F&amp;action_name=Glass+Beads&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
			<wfw:commentRss>https://amdavidson.com/2014/12/glass-beads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scars</title>
		<link>https://amdavidson.com/2014/12/scars/</link>
		<comments>https://amdavidson.com/2014/12/scars/#comments</comments>
		<pubDate>Sun, 14 Dec 2014 20:49:56 +0000</pubDate>
		<dc:creator><![CDATA[Andrew]]></dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://amdavidson.com/?p=1741</guid>
		<description><![CDATA[<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F12%2Fscars%2F&amp;action_name=Scars&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
				<content:encoded><![CDATA[<p><em><a href="https://amdavidson.com/2014/12/scars/img_0204-jpg/"><img src="https://amdavidson.com/wp-content/uploads/2014/12/IMG_0204-650x650.jpg" alt="IMG_0204.JPG" /></a></em></p>
<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F12%2Fscars%2F&amp;action_name=Scars&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
			<wfw:commentRss>https://amdavidson.com/2014/12/scars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vermont</title>
		<link>https://amdavidson.com/2014/11/vermont/</link>
		<comments>https://amdavidson.com/2014/11/vermont/#comments</comments>
		<pubDate>Sat, 15 Nov 2014 01:56:55 +0000</pubDate>
		<dc:creator><![CDATA[Andrew]]></dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://amdavidson.com/?p=1727</guid>
		<description><![CDATA[<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F11%2Fvermont%2F&amp;action_name=Vermont&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
				<content:encoded><![CDATA[<p><a href="https://amdavidson.com/wp-content/uploads/2014/11/IMG_00731.jpg"><img src="https://amdavidson.com/wp-content/uploads/2014/11/IMG_00731-975x1300.jpg" alt="IMG_0073" width="640" height="853" class="aligncenter size-large wp-image-1730" /></a></p>
<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F11%2Fvermont%2F&amp;action_name=Vermont&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
			<wfw:commentRss>https://amdavidson.com/2014/11/vermont/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Big Cottonwood Canyon</title>
		<link>https://amdavidson.com/2014/08/big-cottonwood-canyon/</link>
		<comments>https://amdavidson.com/2014/08/big-cottonwood-canyon/#comments</comments>
		<pubDate>Sat, 30 Aug 2014 13:57:07 +0000</pubDate>
		<dc:creator><![CDATA[Andrew]]></dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://amdavidson.com/?p=1719</guid>
		<description><![CDATA[<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F08%2Fbig-cottonwood-canyon%2F&amp;action_name=Big+Cottonwood+Canyon&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
				<content:encoded><![CDATA[<p><em><a href="https://amdavidson.com/wp-content/uploads/2014/08/20140825-P8250159.jpg"><img class="aligncenter size-large wp-image-1721" src="https://amdavidson.com/wp-content/uploads/2014/08/20140825-P8250159-1300x975.jpg" alt="20140825-P8250159" width="1300" height="975" /></a></em></p>
<p><a href="https://amdavidson.com/wp-content/uploads/2014/08/20140825-P8250160.jpg"><img class="aligncenter size-large wp-image-1722" src="https://amdavidson.com/wp-content/uploads/2014/08/20140825-P8250160-975x1300.jpg" alt="20140825-P8250160" width="975" height="1300" /></a></p>
<p><em><a href="https://amdavidson.com/wp-content/uploads/2014/08/20140825-P8250164.jpg"><img class="aligncenter size-large wp-image-1723" src="https://amdavidson.com/wp-content/uploads/2014/08/20140825-P8250164-1300x975.jpg" alt="20140825-P8250164" width="1300" height="975" /></a></em></p>
<p><em><a href="https://amdavidson.com/wp-content/uploads/2014/08/20140825-P8250179.jpg"><img class="aligncenter size-large wp-image-1720" src="https://amdavidson.com/wp-content/uploads/2014/08/20140825-P8250179-1300x975.jpg" alt="20140825-P8250179" width="1300" height="975" /></a></em></p>
<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F08%2Fbig-cottonwood-canyon%2F&amp;action_name=Big+Cottonwood+Canyon&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
			<wfw:commentRss>https://amdavidson.com/2014/08/big-cottonwood-canyon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Antelope Island</title>
		<link>https://amdavidson.com/2014/08/antelope-island/</link>
		<comments>https://amdavidson.com/2014/08/antelope-island/#comments</comments>
		<pubDate>Sat, 30 Aug 2014 13:51:58 +0000</pubDate>
		<dc:creator><![CDATA[Andrew]]></dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://amdavidson.com/?p=1715</guid>
		<description><![CDATA[<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F08%2Fantelope-island%2F&amp;action_name=Antelope+Island&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
				<content:encoded><![CDATA[<p><em><a href="https://amdavidson.com/wp-content/uploads/2014/08/20140823-P8230138.jpg"><img class="aligncenter size-large wp-image-1717" src="https://amdavidson.com/wp-content/uploads/2014/08/20140823-P8230138-1300x974.jpg" alt="20140823-P8230138" width="1300" height="974" /></a></em></p>
<p><em><a href="https://amdavidson.com/wp-content/uploads/2014/08/20140823-P8230146.jpg"><img class="aligncenter size-large wp-image-1716" src="https://amdavidson.com/wp-content/uploads/2014/08/20140823-P8230146-1300x974.jpg" alt="20140823-P8230146" width="1300" height="974" /></a></em></p>
<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F08%2Fantelope-island%2F&amp;action_name=Antelope+Island&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
			<wfw:commentRss>https://amdavidson.com/2014/08/antelope-island/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Salt Lake Temple</title>
		<link>https://amdavidson.com/2014/08/salt-lake-temple/</link>
		<comments>https://amdavidson.com/2014/08/salt-lake-temple/#comments</comments>
		<pubDate>Sat, 30 Aug 2014 13:48:31 +0000</pubDate>
		<dc:creator><![CDATA[Andrew]]></dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://amdavidson.com/?p=1712</guid>
		<description><![CDATA[<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F08%2Fsalt-lake-temple%2F&amp;action_name=Salt+Lake+Temple&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
				<content:encoded><![CDATA[<p><em><a href="https://amdavidson.com/wp-content/uploads/2014/08/20140823-P8230103.jpg"><img src="https://amdavidson.com/wp-content/uploads/2014/08/20140823-P8230103-1300x975.jpg" alt="20140823-P8230103" width="1300" height="975" class="aligncenter size-large wp-image-1713" /></a></em></p>
<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F08%2Fsalt-lake-temple%2F&amp;action_name=Salt+Lake+Temple&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
			<wfw:commentRss>https://amdavidson.com/2014/08/salt-lake-temple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Black Moshannon</title>
		<link>https://amdavidson.com/2014/06/black-moshannon/</link>
		<comments>https://amdavidson.com/2014/06/black-moshannon/#comments</comments>
		<pubDate>Wed, 11 Jun 2014 12:02:26 +0000</pubDate>
		<dc:creator><![CDATA[Andrew]]></dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://amdavidson.com/?p=1584</guid>
		<description><![CDATA[Black Moshannon is a man made lake in Central Pennsylvania that is surrounded by peat bogs that leach tannins into the water turning it conspicuously black. We stayed there for a couple nights in some nice, old cabins built by the CCC in the 30s and 40s.<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F06%2Fblack-moshannon%2F&amp;action_name=Black+Moshannon&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></description>
				<content:encoded><![CDATA[<p><a href="https://amdavidson.com/2014/06/black-moshannon/20140602-img_2880/"><img src="https://amdavidson.com/wp-content/uploads/2014/06/20140602-IMG_2880-488x650.jpg" alt="20140602-IMG_2880" /></a></p>
<p>Black Moshannon is a man made lake in Central Pennsylvania that is surrounded by peat bogs that leach tannins into the water turning it conspicuously black. We stayed there for a couple nights in some nice, old cabins built by the CCC in the 30s and 40s.</p>
<p><em><a href="https://amdavidson.com/2014/06/black-moshannon/20140602-img_2873/"><img src="https://amdavidson.com/wp-content/uploads/2014/06/20140602-IMG_2873-650x488.jpg" alt="20140602-IMG_2873" /></a></em></p>
<p><em><a href="https://amdavidson.com/2014/06/black-moshannon/20140602-img_2871/"><img src="https://amdavidson.com/wp-content/uploads/2014/06/20140602-IMG_2871-650x488.jpg" alt="20140602-IMG_2871" /></a></em></p>
<p><a href="https://amdavidson.com/2014/06/black-moshannon/20140602-img_2868/"><img src="https://amdavidson.com/wp-content/uploads/2014/06/20140602-IMG_2868-488x650.jpg" alt="20140602-IMG_2868" /></a></p>
<p><em><a href="https://amdavidson.com/2014/06/black-moshannon/20140602-img_2866/"><img src="https://amdavidson.com/wp-content/uploads/2014/06/20140602-IMG_2866-650x488.jpg" alt="20140602-IMG_2866" /></a></em></p>
<img src="https://amdavidson.com/piwik/piwik.php?idsite=1&amp;rec=1&amp;url=https%3A%2F%2Famdavidson.com%2F2014%2F06%2Fblack-moshannon%2F&amp;action_name=Black+Moshannon&amp;urlref=https%3A%2F%2Famdavidson.com%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" />]]></content:encoded>
			<wfw:commentRss>https://amdavidson.com/2014/06/black-moshannon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.247 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2015-05-03 18:34:55 -->

<!-- Compression = gzip -->