<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule">
<channel>
<title>paul lockaby - photos and essays from an engineer</title>
<link>http://www.paullockaby.com/</link>
<description><![CDATA[photos and essays from an engineer]]></description>
<language>en-us</language>
<copyright><![CDATA[Copyright 2002-2012, Paul Lockaby. All rights reserved.]]></copyright>
<pubDate>Sat, 04 Feb 2012 17:14:48 +0000</pubDate>
<lastBuildDate>Tue, 07 Feb 2012 10:48:01 +0000</lastBuildDate>
<item>
<title>Etherpad User Interface 2.0 [PROJECTS]</title>
<link>http://www.paullockaby.com/projects/project/etherpad-user-interface-2.0</link>
<description><![CDATA[Adding ability to rename and change privacy on notepads. Updating interface to work well with mobile Safari on iOS. Fixing stripslashes problems.]]></description>
<guid isPermaLink="false">etherpad-user-interface-2.0</guid>
<pubDate>Mon, 06 Feb 2012 02:35:59 +0000</pubDate>
</item>
<item>
<title>Olympic Mountains at Sunrise [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/B1F0A320-4F53-11E1-B9F2-8396041B3B99</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=59d0177aa928ddff32a31bc0a74a7724" title="Olympic Mountains at Sunrise"/><br/><br/>The Olympic Mountains at sunrise, as seen from Seattle over the Puget Sound.<br/><br/><i>Taken at 7:40AM on February 2, 2012</i><br/><i>Copyright 2012 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">B1F0A320-4F53-11E1-B9F2-8396041B3B99</guid>
<pubDate>Sat, 04 Feb 2012 17:14:48 +0000</pubDate>
</item>
<item>
<title>OpenID Server Application 3.1 [PROJECTS]</title>
<link>http://www.paullockaby.com/projects/project/openid-server-app-3.1</link>
<description><![CDATA[* Cosmetic changes to make the interface very pretty when using iOS.<br />
* Enable detection of cookie support to avoid errors when cookies are disabled.]]></description>
<guid isPermaLink="false">openid-server-app-3.1</guid>
<pubDate>Sat, 28 Jan 2012 08:32:42 +0000</pubDate>
</item>
<item>
<title>Jake [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/E985DF00-46FF-11E1-8927-E9D38E36217A</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=2bb6dd3658acf221770dee0e653e0ac1" title="Jake"/><br/><br/>In love with the snow. Well at least one of us is.<br/><br/><i>Taken at 3:56PM on January 1, 2012</i><br/><i>Copyright 2012 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">E985DF00-46FF-11E1-8927-E9D38E36217A</guid>
<pubDate>Wed, 25 Jan 2012 02:54:45 +0000</pubDate>
</item>
<item>
<title>Etherpad User Interface 1.1 [PROJECTS]</title>
<link>http://www.paullockaby.com/projects/project/etherpad-user-interface-1.1</link>
<description><![CDATA[Updated the installation instructions and added missing images. Also fixed the includes path for all PHP libraries. Removed some legacy functionality that was breaking the configuration options.<br />
<br />
Special thanks to John McLear for finding most of these bugs and kicking my butt into releasing fixes.]]></description>
<guid isPermaLink="false">etherpad-user-interface-1.1</guid>
<pubDate>Sat, 21 Jan 2012 09:25:15 +0000</pubDate>
</item>
<item>
<title>Downtown Seattle at Night [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/462C0396-3969-11E1-A948-92296B2F7081</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=6179e1c80a83ebf60b555acb541f156f" title="Downtown Seattle at Night"/><br/><br/>Looking toward downtown Seattle from the roof of my apartment in Central District.<br/><br/><i>Taken at 1:32AM on January 1, 2012</i><br/><i>Copyright 2012 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">462C0396-3969-11E1-A948-92296B2F7081</guid>
<pubDate>Sat, 07 Jan 2012 19:53:42 +0000</pubDate>
</item>
<item>
<title>Etherpad User Interface 1.0 [PROJECTS]</title>
<link>http://www.paullockaby.com/projects/project/etherpad-user-interface-1.0</link>
<description><![CDATA[Initial release of this new software.]]></description>
<guid isPermaLink="false">etherpad-user-interface-1.0</guid>
<pubDate>Sun, 01 Jan 2012 21:39:38 +0000</pubDate>
</item>
<item>
<title>OpenID Server Application 3.0 [PROJECTS]</title>
<link>http://www.paullockaby.com/projects/project/openid-server-app-3.0</link>
<description><![CDATA[Adds the choice of two authentication mechanisms: MySQL/database and pwauth/system authentication. Also fixes some security bugs in the login process.]]></description>
<guid isPermaLink="false">openid-server-app-3.0</guid>
<pubDate>Mon, 26 Dec 2011 03:42:20 +0000</pubDate>
</item>
<item>
<title>OpenID Server Application 2.0 [PROJECTS]</title>
<link>http://www.paullockaby.com/projects/project/openid-server-app-2.0</link>
<description><![CDATA[This release adds these enhancements:<br />
- Added profile editor for SREG communication.<br />
- Added trust interface to allow the user to specify what SREG fields should be sent to the remote website.<br />
- Added interface to add, remove, and modify users from the OpenID system.<br />
<br />
This release features these bug fixes:<br />
- Removed undefined warnings when no nickname, fullname, or email address appears on profile.pm<br />
- Removed use of the forged header check because the OpenID protocol makes this check redundant and it wasn't working so well in my code.<br />
- Fixed bug where DBI errors weren't being raised. (RaiseError was set to 0, not 1.)<br />
- Fixed bug where the SSL version of the user's profile was being referenced in the OpenID endpoint. (Breaks some OpenID consumers when used with self-signed certificates.)<br />
- Added extra checks on the user to ensure that someone is logged in before allowing certain actions.<br />
- Updated documentation for installation and the default configuration to be consistent with one another.]]></description>
<guid isPermaLink="false">openid-server-app-2.0</guid>
<pubDate>Thu, 08 Dec 2011 03:38:38 +0000</pubDate>
</item>
<item>
<title>Weave API Perl Modules 1.0 [PROJECTS]</title>
<link>http://www.paullockaby.com/projects/project/weave-api-1.0</link>
<description><![CDATA[]]></description>
<guid isPermaLink="false">weave-api-1.0</guid>
<pubDate>Wed, 23 Nov 2011 00:19:00 +0000</pubDate>
</item>
<item>
<title>OpenID Server Application 1.0 [PROJECTS]</title>
<link>http://www.paullockaby.com/projects/project/openid-server-app-1.0</link>
<description><![CDATA[]]></description>
<guid isPermaLink="false">openid-server-app-1.0</guid>
<pubDate>Sun, 20 Nov 2011 20:39:35 +0000</pubDate>
</item>
<item>
<title>So you want to generate self-signed certificates... [ESSAYS]</title>
<link>http://www.paullockaby.com/essays/essay/747CF786-0305-11E1-B416-E4D13DC180CF</link>
<description><![CDATA[For whatever reason, you want to sign your own certificates for a number of domains that you run. You're probably doing this so that you can have a secure area of your site that only you log into. A self-signed certificate is definitely not a good idea if you are running a public facing encrypted site.<br/><br/><br />
<br />
But we'll make this a little easier by signing each certificate with a certificate authority that we also control. This makes it really easy to download the CA and install it on computers that we may be using and avoiding the whole hassle of trying to "accept" it.<br/><br/><br />
<br />
Self-signed certificates should be made as the <tt>root</tt> user. This is primarily because it'll be use by parts throughout your system. It's good to have your certificates stored in a location that is available to everybody but easily locked down. So let's make that location:<br/><br />
<br />
<blockquote><pre><br />
mkdir /etc/ssl.key<br />
mkdir /etc/ssl.csr<br />
mkdir /etc/ssl.crt<br />
mkdir /etc/ssl.ca<br />
</pre></blockquote><br />
<br />
We'll change the permissions on it later, once all of the certificates have been created. Now let's create the certificate authority so that we can sign our certificates. In this process it's going to ask you a bunch of information about your your signing authority. You can really fill in whatever you want. Just try to make sure that you remain consistent between each certificate that you sign, for no other reason than consistency is nice. The "common name" in this command can also be anything that you want.<br/><br />
<br />
<blockquote><pre><br />
openssl genrsa -des3 -out /etc/ssl.ca/ca.key 4096<br />
openssl req -new -x509 -days 3650 -key /etc/ssl.ca/ca.key -out /etc/ssl.ca/ca.crt<br />
</pre></blockquote><br />
<br />
That made a certificate authority file that is valid for ten years. I think that should cover you until well after the robots take over. Now let's create our first certificate:<br/><br />
<br />
<blockquote><pre><br />
openssl genrsa -des3 -out /etc/ssl.key/example.com.key 1024<br />
openssl req -new -key /etc/ssl.key/example.com.key -out /etc/ssl.csr/example.com.csr<br />
openssl x509 -req -days 3650 -in /etc/ssl.csr/example.com.csr \<br />
    -CA /etc/ssl.ca/ca.crt -CAkey /etc/ssl.ca/ca.key \<br />
    -set_serial 1 -out /etc/ssl.crt/example.com.crt<br />
openssl rsa -in /etc/ssl.key/example.com.key -out /etc/ssl.key/example.com.key.insecure<br />
mv /etc/ssl.key/example.com.key /etc/ssl.key/example.com.key.secure<br />
mv /etc/ssl.key/example.com.key.insecure /etc/ssl.key/example.com.key<br />
</pre></blockquote><br />
<br />
A few things to point out about this list of commands.<br/><br/><br />
<br />
The first is that the value for "-set_serial" in the third command <b>must</b> be incremented for every certificate you generate. If you re-use a number, neither certificate will work.<br/><br/><br />
<br />
The second is that when filling in details for this certificate, the "common name" <b>must</b> be the domain name for which you are signing the certificate. This can <tt>www.example.com</tt> or <tt>example.com</tt> or if you are feeling lazy it can be <tt>*.example.com</tt>. (Note that <tt>*.example.com</tt> will only sign one level of hostname. So that will cover <tt>foo.example.com</tt> but not <tt>foo.bar.example.com</tt>.)<br/><br/><br />
<br />
The third is that there is a step in there where I create a copy of the private key and rename it to <tt>.insecure</tt>. What this step does is remove the password on the private key. If I did not do that, every time a service is started that needs access to the private key, I would have to enter a password when it started to access the private key. That's kind of annoying sometimes! So I disable that.<br/><br/><br />
<br />
Now after we're done creating all of our certificates, we want to lock them up so that only authorized users can access the private ones and the public ones are accessible.<br/><br />
<br />
<blockquote><pre><br />
chmod 600 /etc/ssl.csr/*<br />
chmod 600 /etc/ssl.key/*<br />
chmod 644 /etc/ssl.crt/*<br />
chmod 644 /etc/ssl.ca/*<br />
chmod 700 /etc/ssl.csr<br />
chmod 700 /etc/ssl.key<br />
chmod 755 /etc/ssl.ca<br />
chmod 755 /etc/ssl.crt<br />
</pre></blockquote><br />
<br />
Once you've got these certificates you'll want to install them in four places: your local browser, your local Java installation, your server's Java installation, and your server's OpenSSL certificate location.<br/><br/><br />
<br />
To get them into your browser is easy: just navigate to the ca.crt file from your browser and follow the instructions! On Mac OS, when you install it into Safari, it will just download the file. You can try to "Open" the file and that will install it into your Keychain and that will make it available to Safari and your entire operating system. On Windows, installing the certificate into Internet Explorer will also make it available to your entire operating system. You'll still have to manually install it into Firefox, Opera, Chrome, etc.<br/><br/><br />
<br />
To get it into Java, you import it manually into the jssecacerts file, and that just takes this command on Windows, Linux, or Mac OS.<br/><br />
<br />
<blockquote><pre><br />
$JAVA_HOME/bin/keytool -import -alias root \<br />
    -file /etc/ssl.ca/ca.crt -storepass changeit \<br />
    -keystore $JAVA_HOME/jre/lib/security/jssecacerts \<br />
    -noprompt -trustcacerts<br />
</pre></blockquote><br />
<br />
And finally, to get it into your server's list of authorized certificates. On Debian this location is <tt>/etc/ssl/certs</tt> and you can link to it by just doing this:<br/><br />
<br />
<blockquote><pre><br />
ln -s /etc/ssl.ca/ca.crt /etc/ssl/certs/localhost.ca.crt<br />
</pre></blockquote><br />
<br />
And now you've done it. If you need to add another certificate for a new domain name just repeat the step where you created <tt>example.org</tt>.]]></description>
<guid isPermaLink="false">747CF786-0305-11E1-B416-E4D13DC180CF</guid>
<pubDate>Sun, 30 Oct 2011 14:42:56 +0000</pubDate>
</item>
<item>
<title>So you want to run MySQL with UTF-8 enabled by default... [ESSAYS]</title>
<link>http://www.paullockaby.com/essays/essay/690FC450-0107-11E1-AFCD-C6EB53B76316</link>
<description><![CDATA[The default character set for MySQL is <a href="http://en.wikipedia.org/wiki/Latin1">Latin1</a>. This is kind of silly because the whole world is indeed moving towards  <a href="http://en.wikipedia.org/wiki/Utf8">UTF-8</a>. But you can change this! Because really, you most definitely want to support any and every language in the world. Or at least you want the potential to do that.<br/><br/><br />
<br />
Are there drawbacks to working the database in UTF-8? There are only two drawbacks that I've encountered. The first is that <a href="http://bugs.mysql.com/bug.php?id=4541">a unique index on a UTF-8 column is limited to 333 characters</a>. The second is that you have to configure UTF-8 onto every client with which you connect to the database. But otherwise it's really to use and set up.<br/><br/><br />
<br />
All you really need to do is edit your <tt>my.cnf</tt> file. This file is in different places on different Unix systems and Windows systems. On Debian, for example, this is located in <tt>/etc/mysql</tt> and on Fedora it is located in <tt>/etc</tt>.<br/><br/><br />
<br />
To make your clients connect and send UTF-8 data, set this in the <tt>[client]</tt> section:<br/><br />
<br />
<blockquote><pre><br />
default-character-set = utf8<br />
</pre></blockquote><br />
<br />
You want to make MySQL communicate in UTF-8 <b>and</b> store things in UTF-8. To have the server do that, add this to the <tt>[mysqld]</tt> section:<br/><br />
<br />
<blockquote><pre><br />
character-set-server = utf8<br />
</pre></blockquote><br />
<br />
Just a few other things that you probably want to add. For example, if you are going to use InnoDB it will create one giant file.  This makes it slow to alter tables, add new tables, back things up, etc. You want to make InnoDB function like MyISAM: one file per table. To do that, add this to <tt>[mysqld]</tt>.<br/><br />
<br />
<blockquote><pre><br />
innodb_file_per_table<br />
</pre></blockquote><br />
<br />
If you expect to insert LOBs into the database, you will probably want to set this in the <tt>[mysqld]</tt> section:<br/><br />
<br />
<blockquote><pre><br />
max_allowed_packet = 1024M<br />
</pre></blockquote><br />
<br />
Of course if you do insert a LOB, you will have some trouble backing up the database with <tt>mysqldump</tt> unless you add this to the <tt>[mysqldump]</tt> section of <tt>my.cnf</tt>.<br/><br />
<br />
<blockquote><pre><br />
max_allowed_packet = 1024M<br />
</pre></blockquote><br />
<br />
You might also need to add <tt>--hex-blob</tt> as an option to <tt>mysqldump</tt> to properly get LOBs saved in a dump file.<br/><br/><br />
<br />
And those are changes that I make to MySQL before starting it up for the first time.]]></description>
<guid isPermaLink="false">690FC450-0107-11E1-AFCD-C6EB53B76316</guid>
<pubDate>Fri, 28 Oct 2011 01:51:53 +0000</pubDate>
</item>
<item>
<title>So you want to automatically login with SSH... [ESSAYS]</title>
<link>http://www.paullockaby.com/essays/essay/5E965CE6-0094-11E1-881C-BA1E23531AF1</link>
<description><![CDATA[Nobody really likes entering one's password repeatedly and sometimes you have automated jobs that need to log in remotely to other systems and you aren't there to enter a password. Fortunately, this is a really easy problem to solve. Depending on your local client -- Windows or Unix -- there are two ways to go about it. The server, on the other hand, is very easy to configure.<br/><br/><br />
<br />
Let's look at Unix first. On the local computer -- the one from which you will be logging into the other -- run this command:<br/><br />
<br />
<blockquote><pre><br />
ssh-keygen -t dsa -b 1024<br />
</pre></blockquote><br />
<br />
This will generate a key pair and ask you where you want to save it. The default is in the <tt>~/.ssh</tt> directory and that should be where you put it. The second question will be if you want to put a passphrase on the key. Unless you want to continue to enter a password when you try to ssh between systems, do not enter a password here.<br/><br/><br />
<br />
The two pairs to the key that were generated are <tt>id_dsa</tt> and <tt>id_dsa.pub</tt>. The former is your private key and should never be shared and will stay on this system. The latter, <tt>id_dsa.pub</tt> is the public key. The public key needs to be placed on any system to which you wish to connect.<br/><br/><br />
<br />
On the other hand, if you are using Windows, make sure that <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">you've downloaded the Windows installer</a>. When you've finished installing it, you want to run PuTTYgen. Generate a standard SSH-2 RSA key with 1024 bits in it.<br/><br/><br />
<br />
Once you've completed making a key, save the public and private keys somewhere on your computer where no one else can access them. You will use the private key in the near future. In the top of the window, where there is a read-only text box that says "Public key for pasting into OpenSSH authorized_keys file", copy that text and paste it into Notepad and save it into a file called <tt>id_dsa.pub</tt>. This public key needs to be placed on any system to which you wish to connect.<br/><br/><br />
<br />
However, you are not done with Windows. To make PuTTy automatically log in to your remote server, you must also run Pageant. Pageant sits in the system tray and holds private keys. You must manually add each private key for Pageant to recognize them. You should place Pageant into your Startup folder so that every time you reboot it is loaded. And of course, <a href="http://the.earth.li/~sgtatham/putty/0.61/htmldoc/Chapter9.html#pageant-cmdline-loadkey">you must follow these instructions to have Pageant automatically load your private keys on startup</a>.<br/><br/><br />
<br />
Great! Now let's put those <tt>id_dsa.pub</tt> files on your remote servers. Copy each one over <b>using a secure transmission protocol, such as SCP</b>. Then log into the remote system and run these commands:<br/><br />
<br />
<blockquote><pre><br />
touch ~/.ssh/authorized_keys<br />
chmod 600 ~/.ssh/authorized_keys<br />
cat id_dsa.pub >> ~/.ssh/authorized_keys<br />
</pre></blockquote><br />
<br />
You'll need to copy each public key into the <tt>authorized_keys</tt> file. And then you're done. That's all there is to it. Now, every time you try to log into that remote server, you will never have to enter a password.]]></description>
<guid isPermaLink="false">5E965CE6-0094-11E1-881C-BA1E23531AF1</guid>
<pubDate>Thu, 27 Oct 2011 12:08:23 +0000</pubDate>
</item>
<item>
<title>So you want to set up a firewall... [ESSAYS]</title>
<link>http://www.paullockaby.com/essays/essay/2E2DA29E-003F-11E1-B36C-962A6E31B75D</link>
<description><![CDATA[Let's say you have a server that is on a network and you want to only allow access to specific services, such as SSH, HTTP, and DNS. And you want this firewall to persist between reboots. Oh yeah, and you want it to work with both IPv4 and IPv6. This is an easy problem!<br/><br/><br />
<br />
We're going to make a few assumptions:<br />
<ul><br />
<li>You are running Linux -- distro doesn't matter</li><br />
<li>You have <a href="http://www.netfilter.org/">iptables</a> installed, though this usually comes with the default installation of your operating system. You can see if it is available by running <tt>iptables --list</tt>.</li><br />
<li>You can run commands as root. iptables will only run as root.</li><br />
<li>Your IPv4 address is 1.2.3.4. (Please substitute your IPv4 address as appropriate.)</li><br />
</ul><br/><br />
<br />
Creating a firewall with iptables is simple: you run the iptables command a few times, each time telling it a new rule, and it applies them, in order, to any packet that comes in. So if you first tell iptables to drop all packets and then tell it on the next command to accept some types of packets, the second command will never really run because the packets were all dropped in the first step.<br/><br/><br />
<br />
First we are going to flush all of the rules that are present so we can start fresh:<br/><br />
<br />
<blockquote><pre><br />
iptables -F<br />
</pre></blockquote><br />
<br />
The next rule, a very basic rule, will allow any existing and established connection:<br/><br />
<br />
<blockquote><pre><br />
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT<br />
</pre></blockquote><br />
<br />
Then we are going to accept any connection that comes from localhost or from ourselves:<br/><br />
<br />
<blockquote><pre><br />
iptables -A INPUT -s 127.0.0.1 -j ACCEPT<br />
iptables -A INPUT -s 1.2.3.4 -j ACCEPT<br />
</pre></blockquote><br />
<br />
It might be very useful to allow incoming ICMP requests. This will allow ping and traceroute on both sides of your interface -- incoming and outgoing -- to work successfully. For <tt>iptables</tt> this would look like this:<br />
<br />
<blockquote><pre><br />
iptables -A INPUT -p icmp -j ACCEPT<br />
</pre></blockquote><br />
<br />
For ICMP, this is the only instance where the <tt>-p</tt> flag is different between IPv4 and IPv6. Everywhere else you can pretty much replace iptables with ip6tables and it will work. That makes the IPv6 statement it look like this:<br />
<br />
<blockquote><pre><br />
ip6tables -A INPUT -p icmpv6 -j ACCEPT<br />
</pre></blockquote><br />
<br />
Once we've done those basic steps, we want to decide which ports we want to allow in. As listed above, we want to allow SSH, HTTP and DNS. In this example we are going to use the names of the ports, but it is very simple to replace "ssh" or "domain" with "22" and "53", respectively. Let's open up a few ports:<br/><br />
<br />
<blockquote><pre><br />
iptables -A INPUT -p tcp --dport ssh -j ACCEPT<br />
iptables -A INPUT -p tcp --dport domain -j ACCEPT<br />
iptables -A INPUT -p udp --dport domain -j ACCEPT<br />
iptables -A INPUT -p tcp --dport http -j ACCEPT<br />
iptables -A INPUT -p tcp --dport https -j ACCEPT<br />
</pre></blockquote><br />
<br />
However, we want to limit people from connecting to our SSH server too quickly. To do that, we can restrict new connections on port 22 when the remote address has made more than four connections in sixty seconds:<br/><br />
<br />
<blockquote><pre><br />
iptables -I INPUT -p tcp --dport 22 \<br />
         -m state --state NEW -m recent --set<br />
iptables -I INPUT -p tcp --dport 22 \<br />
         -m state --state NEW -m recent \<br />
         --update --seconds 60 --hitcount 4 -j DROP<br />
</pre></blockquote><br />
<br />
Finally, after allowing in all of the above connections, we want to drop anything else:<br/><br />
<br />
<blockquote><pre><br />
iptables -A INPUT -j DROP<br />
</pre></blockquote><br />
<br />
Now that we've done this, our server will only accept outside connections on ports 22, 53, 80 and 443. But when we reboot, you will quickly find that everything was lost! Saving your firewall between reboots depends on the system. On Redhat-like systems -- CentOS, RHEL, Fedora -- this capability is built in:<br/><br />
<br />
<blockquote><pre><br />
/etc/init.d/iptables save<br />
</pre></blockquote><br />
<br />
On Debian, you have to set it up yourself:<br/><br />
<br />
<blockquote><pre><br />
mkdir /etc/firewall<br />
iptables-save &gt; /etc/firewall/ipv4.conf<br />
</pre></blockquote><br />
<br />
Then force the firewall to reload on the next boot by editing <tt>/etc/rc.local</tt> and adding this simple line:<br />
<br />
<blockquote><pre><br />
iptables-restore &lt; /etc/firewall/ipv4.conf<br />
</pre></blockquote><br />
<br />
Now you've got a simple firewall set up.]]></description>
<guid isPermaLink="false">2E2DA29E-003F-11E1-B36C-962A6E31B75D</guid>
<pubDate>Thu, 27 Oct 2011 01:58:35 +0000</pubDate>
</item>
<item>
<title>Directions to Popular Hiking Destinations in Northern Virginia, Part 1 [ESSAYS]</title>
<link>http://www.paullockaby.com/essays/essay/0368302E-B0DA-11E0-BE1F-80DAAC25C59E</link>
<description><![CDATA[<b>Mary's Rock</b><br/><br/><br />
<br />
Mary's Rock is without a doubt the shortest hike for the best view. A mere 2.2 miles round-trip, you arrive at the top for a 360 degree view of Shenandoah National Park. To get to the trailhead, you must pay a fee. Last I checked it was $15 to get in for seven days, but a year long pass is still just $30.<br/><br/><br />
<br />
To get there, take I-66 west and exit at 43 onto US-29 southbound, toward Gainesville. Stay on US-29 southbound for about 13 miles until you begin to come up to Warrenton. As you approach Warrenton, the road will get wider and if you stay to the right where US-29 joins US-211. You want to stay on US-211 through Warrenton and then right back out of Warrenton. You will follow US-211 for about twenty-nine miles to Thornton Gap. The last section of this road will lead you up the side of the Shenandoah Mountains through a series of awesome switchbacks until you reach the top where US-211 intersects with Skyline Drive.<br/><br/><br />
<br />
Get on Skyline Drive heading south, after paying the outrageous park fee. You will go through a tunnel and then past three scenic views on your left until you reach a parking lot that does NOT have a scenic view. This parking lot is actually for another trail but if you cross the road and and walk south about 100 feet, on the right you will see the trailhead for Mary's Rock.<br/><br/><br />
<br />
The first part of the trail is blue blazed for 0.6 miles. You will pass a destroyed building that says no camping and eventually reach an intersection with the Appalachian Trail. Take a right and follow the ridge for another half a mile when you will see another trail marker and a spur trail to your left that is a straight path up to summit. So easy!<br/><br/><br />
<br />
<center><br />
    <img src="/pub/pictures/hiking/nova/marysrock.jpg" alt="Mary's Rock"/><br/><br />
    <b>Mary's Rock</b><br />
</center><br />
<br />
<b>Sugarloaf Mountain</b><br/><br/><br />
<br />
<a href="http://www.sugarloafmd.com/">Sugarloaf Mountain</a> is a privately owned mountain that is open to the public for the summer. There is no fee to get to the mountain but you should check that it is open before heading out there because it does close for the winter. It is also an incredibly easy hike with a great reward at the top. It does have a bit of a climb that is assisted with a staircase and there is usually a pretty big crowd at the top, too, so this is not a hike for solitude.<br/><br/><br />
<br />
To get to Sugarloaf, head on I-270 northbound from I-495. Continue until I-270 narrows into a four lane highway and get off at Exit 22. At the bottom of the ramp, take a right onto MD-109, also known as Old Hundred Road. Continue on this road for about two miles until you come to Comus Road. There will be the Comus Inn on your right. Also on your right is a farmers market if you are so interested.<br/><br/><br />
<br />
Head on Comus Road for between two and three miles until you reach a stop sign in the road and an open parking lot-like area. You can go straight, left, hard right or soft right. If the Mountain is not open, the soft right will be closed. Do not be tempted to take the hard right. It will take you nowhere. Follow the road up the side of the mountain until you reach the large parking lot at the top. There you will find the entrance to the short hike up to the view seen below.<br/><br/><br />
<br />
<center><br />
    <img src="/pub/pictures/hiking/nova/sugarloafmountain.jpg" alt="Sugarloaf Mountain"/><br/><br />
    <b>Sugarloaf Mountain</b><br />
</center><br />
<br />
<b>Old Rag</b><br/><br/><br />
<br />
<a href="http://www.nps.gov/shen/planyourvisit/old_rag.htm">Old Rag</a> is probably the most popular hike in Virginia. However, it is in a portion of the Shenandoah National Park that has a fee. Last I checked it was $15 to get in for seven days, but a year long pass is still just $30. The park service has also closed the parking lot that is closer to the trail head in favor of having people park at a field that adds another mile to the hike.<br/><br/><br />
<br />
But to get there, take I-66 west and exit at 43 onto US-29 southbound, toward Gainesville. Stay on US-29 southbound for about 13 miles until you begin to come up to Warrenton. As you approach Warrenton, the road will get wider and if you stay to the right where US-29 joins US-211. You want to stay on US-211 through Warrenton and then right back out of Warrenton. You will follow US-211 for 28 miles until you reach Sperryville. You will know you are in Sperryville because the road will change from four lane divided to two lane non-divided highway. Right after that change in the road, take a left to continue onto US-522 which will lead you through downtown Sperryville. Continue on US-522 for half a mile until you arrive at VA-231, also known as F.T. Valley Road, on your right, which you will take for about seven miles. When you see County Road 707, also known as Sharp Rock Road. When County Road 707 turns right and you see State Route 600 on your left, turn left onto State Route 600. Once on State Route 600, you will see the parking lot on your left because the park service blocks the road and forces you into the parking lot.<br/><br/><br />
<br />
The hike itself can either be a 7.2 mile loop or a 5 mile in and out. I recommend the loop because you get to do a lot of scrambling on rocks to get up. To do the loop, you take a trailhead that starts at the upper parking lot -- which is now closed. The in and out trail starts a little farther back and you will know that you are on it because you will cross a stream on a bridge first. After taking a fire road for a few miles, you will reach a juncture and take a trail to the left that heads to the summit. This is really boring.<br/><br/><br />
<br />
The loop, though, is much better. It starts out flat and a little boring but it gradually gets steeper and eventually you will start to have to work your way through climbing up rocks and then worming your way through holes in those same rocks. The views at the top continue for the last several miles of the trail. Be sure to be prepared for the fact that the top of the mountain is cooler than the parking area and will be windy. Also plan to take about six hours to do the whole hike, and perhaps longer if there are a lot of people at the parking lot who will back up the trail. But there is a reason that it is the most popular hike in Virginia.<br/><br/><br />
<br />
<b>Wolf Gap</b><br/><br/><br />
<br />
The <a href="http://www.fs.usda.gov/wps/portal/fsinternet/!ut/p/c4/04_SB8K8xLLM9MSSzPy8xBz9CP0os3gDfxMDT8MwRydLA1cj72BTJw8jAwjQL8h2VAQAzHJMsQ!!/?ss=110808&amp;ttype=recarea&amp;recid=74043&amp;actid=62&amp;navtype=BROWSEBYSUBJECT&amp;position=BROWSEBYSUBJECT&amp;navid=110340000000000&amp;pnavid=110000000000000&amp;cid=null&amp;pname=George+Washington+%26+Jefferson+National+Forest+-+Wolf+Gap+Recreation+Area">Wolf Gap Recreation Area</a> is the trail head to two great hikes: Tibbets Knob and Big Schloss. The former is a hike for solitude, the latter has a better view but is more popular. There is also camping here when the park is open.<br/><br/><br />
<br />
To get to Wolf Gap, which is situated on the border between Virginia and West Virginia, head out to I-81 and Exit 279 to Woodstock. However you are going to head west on VA-42, away from Woodstock. After about five miles you will pass a church on your right and you will cross a stream and you will see State Route 675, also known as Wolf Grap Road. Wolf Gap Road will cross the same stream again and take a left and parallel the same stream.<br/><br/><br />
<br />
You will see several forks in the road but it is not until you see one that leads Wolf Gap Road, aka State Route 675, to the right. There will be a green sign that says Wolf Gap and points to the right. Continue on Wolf Gap Road until you arrive at the Wolf Gap Recreation Area. You will know that you've gone too far if you see a sign that says "Welcome to West Virginia".<br/><br/><br />
<br />
Once you are at the parking lot, you can stay on that side of Wolf Gap Road and go to the trail head for Big Schloss or you can cross the road and go to the trail head for Tibbet Knob. Tibbet Knob is about three miles of easy hiking and has a big of climbing to get to the top and as said before provides lots of solitude. Big Schloss, on the other hand, is four miles that starts out straight up on a fire trail. Once you get to the top of the ridge it is another three miles of views until you reach a white blazed spur that will bring you to a 360 degree panoramic view called Big Schloss.<br/><br/><br />
<br />
<i>Warning: Use these directions in combination with a road map, a topographical map, and a weather report to ensure that you know where you are going and that you can arrive at your destination safely.</i>]]></description>
<guid isPermaLink="false">0368302E-B0DA-11E0-BE1F-80DAAC25C59E</guid>
<pubDate>Mon, 18 Jul 2011 01:05:22 +0000</pubDate>
</item>
<item>
<title>Downtown Vancouver at Night [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/2E6E4144-8D69-11E0-8270-F71F248BFD84</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=31a2009f2efbc5648a64f09a829e0db6" title="Downtown Vancouver at Night"/><br/><br/>Looking toward Vancouver City Center from our hotel in Robson District just at sunset.<br/><br/><i>Taken at 12:09AM on May 5, 2011</i><br/><i>Copyright 2011 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">2E6E4144-8D69-11E0-8270-F71F248BFD84</guid>
<pubDate>Thu, 02 Jun 2011 22:39:37 +0000</pubDate>
</item>
<item>
<title>Vancouver Skyline [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/7333B2FC-8D67-11E0-AA69-80C1A9663DE2</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=9dc4b3ad743d75debe47fa2b010f060c" title="Vancouver Skyline"/><br/><br/>To the left is Stanley Park. The road visible at the bottom is West George Avenue. In the back, just before the mountains, is English Harbour.<br/><br/><i>Taken at 7:32PM on May 5, 2011</i><br/><i>Copyright 2011 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">7333B2FC-8D67-11E0-AA69-80C1A9663DE2</guid>
<pubDate>Thu, 02 Jun 2011 22:27:25 +0000</pubDate>
</item>
<item>
<title>Capital Columns [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/695E97D0-79D3-11E0-8192-FB5A24A5EDDE</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=ddceaab97e221cf6990aa77021570651" title="Capital Columns"/><br/><br/>These columns used to be part of the Capitol building until it was expanded in the 1950s. At that point in time they were moved to the National Arboretum in Northeast D.C.<br/><br/><i>Taken at 12:59PM on May 5, 2011</i><br/><i>Copyright 2011 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">695E97D0-79D3-11E0-8192-FB5A24A5EDDE</guid>
<pubDate>Mon, 09 May 2011 00:29:37 +0000</pubDate>
</item>
<item>
<title>Denny Lockaby [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/711F5792-08A5-11E0-B9FC-B2780677B262</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=1551abff24cd77a7c35898deb45c27eb" title="Denny Lockaby"/><br/><br/>Looking at me.<br/><br/><i>Taken at 11:30AM on November 11, 2010</i><br/><i>Copyright 2010 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">711F5792-08A5-11E0-B9FC-B2780677B262</guid>
<pubDate>Wed, 15 Dec 2010 23:46:02 +0000</pubDate>
</item>
<item>
<title>Tractor [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/1914F43E-6EB4-11DF-8930-5A5EDAD6DFA3</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=db1fa160d1c0b74946d67578cbeb04bf" title="Tractor"/><br/><br/>A forlorn tractor sits idle in a growth of weeds.<br/><br/><i>Taken at 4:50PM on May 5, 2010</i><br/><i>Copyright 2010 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">1914F43E-6EB4-11DF-8930-5A5EDAD6DFA3</guid>
<pubDate>Thu, 03 Jun 2010 02:02:49 +0000</pubDate>
</item>
<item>
<title>Protesting [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/C921351E-3808-11DF-A744-0A62DAD6DFA3</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=f24461f8c0eae3ce24cc8ab90fcceb76" title="Protesting"/><br/><br/>A man protests health care by continuously standing in front of the Capital Building simply holding an American flag.<br/><br/><i>Taken at 12:24PM on March 3, 2010</i><br/><i>Copyright 2010 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">C921351E-3808-11DF-A744-0A62DAD6DFA3</guid>
<pubDate>Thu, 25 Mar 2010 12:20:37 +0000</pubDate>
</item>
<item>
<title>Heading West [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/A190FE78-138A-11DF-A606-A39478085DA8</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=4254e4bfaa887f30ff0d3f34642ff844" title="Heading West"/><br/><br/>A single car heading down I-66.<br/><br/><i>Taken at 4:32PM on February 2, 2010</i><br/><i>Copyright 2010 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">A190FE78-138A-11DF-A606-A39478085DA8</guid>
<pubDate>Sun, 07 Feb 2010 01:46:46 +0000</pubDate>
</item>
<item>
<title>Orange Slats [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/4708F82A-1358-11DF-B087-D88378085DA8</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=99544cfda1a805e9136b2ab98821dba6" title="Orange Slats"/><br/><br/>The slats that make up the railing of my balcony.<br/><br/><i>Taken at 8:11PM on February 2, 2010</i><br/><i>Copyright 2010 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">4708F82A-1358-11DF-B087-D88378085DA8</guid>
<pubDate>Sat, 06 Feb 2010 19:46:15 +0000</pubDate>
</item>
<item>
<title>Hains Point [PHOTOS]</title>
<link>http://www.paullockaby.com/photos/photo/3451E2EA-0E09-11DF-B0BE-7BC178085DA8</link>
<description><![CDATA[<img src="http://www.paullockaby.com/support/data/?id=c0a42cd737fb73e7c66169a877a92c7c" title="Hains Point"/><br/><br/>An empty bench overlooks the Potomac River. Reagan National Airport is unseen in the background through the falling snow and the dirty clouds. A winter day.<br/><br/><i>Taken at 2:29PM on January 1, 2010</i><br/><i>Copyright 2010 Paul Lockaby. All rights reserved.</i><br/><br/>]]></description>
<guid isPermaLink="false">3451E2EA-0E09-11DF-B0BE-7BC178085DA8</guid>
<pubDate>Sun, 31 Jan 2010 01:37:48 +0000</pubDate>
</item>
</channel>
</rss>
