<?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>Aaron&#039;s Worthless Words &#187; asa</title>
	<atom:link href="http://aconaway.com/tag/asa/feed/" rel="self" type="application/rss+xml" />
	<link>http://aconaway.com</link>
	<description>It&#039;s possible that someone somewhere needs to see this.</description>
	<lastBuildDate>Wed, 01 Feb 2012 02:07:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Stubby Post &#8211; Changing the Prompt on the ASA</title>
		<link>http://aconaway.com/2011/01/19/stubby-post-changing-the-prompt-on-the-asa/</link>
		<comments>http://aconaway.com/2011/01/19/stubby-post-changing-the-prompt-on-the-asa/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 03:08:08 +0000</pubDate>
		<dc:creator>Aaron Conaway</dc:creator>
				<category><![CDATA[asa]]></category>
		<category><![CDATA[active]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[context]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[failover]]></category>
		<category><![CDATA[hostname]]></category>
		<category><![CDATA[primary]]></category>
		<category><![CDATA[priority]]></category>
		<category><![CDATA[prompt]]></category>
		<category><![CDATA[secondary]]></category>
		<category><![CDATA[standby]]></category>
		<category><![CDATA[state]]></category>

		<guid isPermaLink="false">http://aconaway.com/?p=1339</guid>
		<description><![CDATA[RichardF commented on an article I wrote last November and mentioned the prompt command in the ASA.  I never set aside any time to research it, but I finally took the time today while waiting for a maintenance window.]]></description>
			<content:encoded><![CDATA[<p>RichardF commented on <a href="http://aconaway.com/2010/11/22/running-commands-on-a-standby-asa-from-the-active/">an article I wrote last November</a> and mentioned the <em>prompt</em> command in the ASA.&nbsp; I never set aside any time to research it, but I finally took the time today while waiting for a maintenance window.</p>
<p>This is one of those little things in life that make me happy.&nbsp; Since the active ASA always has the same hostname and IP address, I find it hard to keep track of to which firewall I&#39;m actually connected.&nbsp; That &quot;configurtions are no long in sync&quot; message you get when you <em>conf t</em> on the standby firewall really irks me.&nbsp; With the <em>prompt</em> command, I can see which firewall I&#39;m on and in what state it is.</p>
<p>Here are the options you can use.</p>
<blockquote>
<p>firewall(config)# prompt ?</p>
<p>		configure mode commands/options:<br />
		&nbsp; context&nbsp;&nbsp; Display the context in the session prompt (multimode only)<br />
		&nbsp; domain&nbsp;&nbsp;&nbsp; Display the domain in the session prompt<br />
		&nbsp; hostname&nbsp; Display the hostname in the session prompt<br />
		&nbsp; priority&nbsp; Display the priority in the session prompt<br />
		&nbsp; state&nbsp;&nbsp;&nbsp;&nbsp; Display the traffic passing state in the session prompt</p>
</blockquote>
<p>Note that the command is similar to the <em>service timestamps</em> in IOS where you can stack options.&nbsp; I wound up setting my prompts to &quot;hostname priority state&quot; so I can see that information without having to do a <em>show failover</em>.&nbsp; If you run contexts, I&#39;m sure that would be a good one to include as well.&nbsp; I imagine adding &quot;domain&quot; may make the prompt too long for use, though.&nbsp; Heh.</p>
<p>Send any <strike>candy hearts</strike> questions my way.</p>
<div class="wp-about-author-containter-around" style="background-color:#ffffff;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/14352aa939196349e4b9f2a272ca5112?s=100&amp;d=&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://aconaway.com/author/jac/' title='Aaron Conaway'>Aaron Conaway</a></h3><p>I like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.</p><p><a href='http://aconaway.com' title='Aaron Conaway'>Website</a> - <a href='http://aconaway.com/author/jac/' title='More posts by Aaron Conaway'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://aconaway.com/2011/01/19/stubby-post-changing-the-prompt-on-the-asa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Running Commands on a Standby ASA from the Active</title>
		<link>http://aconaway.com/2010/11/22/running-commands-on-a-standby-asa-from-the-active/</link>
		<comments>http://aconaway.com/2010/11/22/running-commands-on-a-standby-asa-from-the-active/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 18:19:34 +0000</pubDate>
		<dc:creator>Aaron Conaway</dc:creator>
				<category><![CDATA[asa]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[exec]]></category>
		<category><![CDATA[failover]]></category>

		<guid isPermaLink="false">http://aconaway.com/?p=1237</guid>
		<description><![CDATA[I was exploring commands on the ASA a while back and discovered that you can run commands on the standby unit from the active.&#160; It&#39;s a bit weird, though, since you actually run the commands from config mode.&#160; As an example, if you want to do a show interface OUTSIDE on the standby unit to see what the status is, you would do this. firewall(config)#failover exec standby show interface OUTSIDE Interface Ethernet0/0 &#34;OUTSIDE&#34;, is up, line protocol is up Hardware is i82546GB rev03, BW 1000 Mbps, DLY 10 usec &#60;SNIP&#62; Pretty handy when you want to know information about the other firewall without having to log into that sucker (and getting confused by the same prompts and reloading the wrong mate). Send any misplaced commands questions my way. Aaron ConawayI like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.Website - More Posts]]></description>
			<content:encoded><![CDATA[<p>I was exploring commands on the ASA a while back and discovered that you can run commands on the standby unit from the active.<span id="more-1237"></span>&nbsp; It&#39;s a bit weird, though, since you actually run the commands from config mode.&nbsp;</p>
<p>As an example, if you want to do a <em>show interface OUTSIDE</em> on the standby unit to see what the status is, you would do this.</p>
<blockquote><pre>firewall(config)#failover exec standby show interface OUTSIDE
Interface Ethernet0/0 &quot;OUTSIDE&quot;, is up, line protocol is up
 Hardware is i82546GB rev03, BW 1000 Mbps, DLY 10 usec
&lt;SNIP&gt;</pre>
</blockquote>
<p>Pretty handy when you want to know information about the other firewall without having to log into that sucker (and getting confused by the same prompts and reloading the wrong mate).</p>
<p>Send any <strike>misplaced commands</strike> questions my way.</p>
<div class="wp-about-author-containter-around" style="background-color:#ffffff;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/14352aa939196349e4b9f2a272ca5112?s=100&amp;d=&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://aconaway.com/author/jac/' title='Aaron Conaway'>Aaron Conaway</a></h3><p>I like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.</p><p><a href='http://aconaway.com' title='Aaron Conaway'>Website</a> - <a href='http://aconaway.com/author/jac/' title='More posts by Aaron Conaway'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://aconaway.com/2010/11/22/running-commands-on-a-standby-asa-from-the-active/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Configuring an Active/Passive ASA Pair</title>
		<link>http://aconaway.com/2010/11/19/configuring-an-activepassive-asa-pair/</link>
		<comments>http://aconaway.com/2010/11/19/configuring-an-activepassive-asa-pair/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 03:30:13 +0000</pubDate>
		<dc:creator>Aaron Conaway</dc:creator>
				<category><![CDATA[asa]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[failover]]></category>
		<category><![CDATA[pix]]></category>

		<guid isPermaLink="false">http://aconaway.com/?p=1176</guid>
		<description><![CDATA[A buddy asked for some help on configuring a pair of ASAs in active/passive mode, and, by pure coincidence, my newest project is to set up the same.&#160; I&#39;ve done it many time, but it&#39;s one of those things that you don&#39;t really do every day (unless you&#39;re a VAR or something).&#160; These things always get covered in rust very quickly in my head, but, once I get one or two details back to the surface, it all comes flooding back. I better take the time to jot down the details.&#160; In this case, I&#39;m working on 5510s running 8.2(1). Assuming both firewalls have the same hardware and software (and a valid license for failover), it&#39;s not hard to configure active/passive pairs.&#160; First of all, you have to declare what role each unit will take &#8211; primary or secondary.&#160; This is just a label and gives neither pair one advantage over the other. &#160;It&#39;s definitely not a priority like in HSRP, so don&#39;t think of it like that. &#160;It&#39;s mostly to know which firewall you&#39;re using since configs on both firewalls will be the same (including the hostname and IP) after you&#39;re done. firewall(config)#failover lan unit ( primary &#124; secondary [...]]]></description>
			<content:encoded><![CDATA[<p>A buddy asked for some help on configuring a pair of ASAs in active/passive mode, and, by pure coincidence, my newest project is to set up the same.&nbsp; I&#39;ve done it many time, but it&#39;s one of those things that you don&#39;t really do every day (unless you&#39;re a VAR or something).&nbsp; These things always get covered in rust very quickly in my head, but, once I get one or two details back to the surface, it all comes flooding back. I better take the time to jot down the details.&nbsp; <span id="more-1176"></span>In this case, I&#39;m working on 5510s running 8.2(1).</p>
<p>Assuming both firewalls have the same hardware and software (and a valid license for failover), it&#39;s not hard to configure active/passive pairs.&nbsp; First of all, you have to declare what role each unit will take &#8211; primary or secondary.&nbsp; This is just a label and gives neither pair one advantage over the other. &nbsp;It&#39;s definitely not a priority like in HSRP, so don&#39;t think of it like that. &nbsp;It&#39;s mostly to know which firewall you&#39;re using since configs on both firewalls will be the same (including the hostname and IP) after you&#39;re done.</p>
<blockquote>
<p>firewall(config)#failover lan unit ( primary | secondary )</p>
</blockquote>
<p>This step is the only one that&#39;s different between the primary and secondary firewalls.&nbsp; The rest apply to both units.</p>
<p>The next step is to configure an interface called the failover link that is used to synchronize the config. &nbsp;The logical choice for a config (at least in my mind) is the Management0/0 interface, but the recommendation is that you use an interface that has the same capacity as the production interfaces. &nbsp;If you&#39;re running on GigabitEthernet interfaces, though, you may want to avoid M0/0 since it&#39;s FastEthernet.&nbsp; Since this is a box full of FEs, it doesn&#39;t matter which one we use, so let&#39;s use Ethernet 0/3 to mix it up a bit.&nbsp; To configure this interface for failover, you need bind a physical interface to a logical name and then give that name an IP address.&nbsp; Of course, let&#39;s not forget to admin up the interface. &nbsp;We&#39;ll call our interface &quot;FOVER&quot;.</p>
<blockquote>
<p>firewall(config)#failover lan interface FOVER Ethernet0/3<br />
		firewall(config)#failover interface ip FOVER 10.10.10.1 255.255.255.252 standby 10.10.10.2<br />
		firewall(config)#interface Ethernet0/3<br />
		firewall(config-if)#no shutdown</p>
</blockquote>
<p>Notice the <em>standby</em> directive when you configure the IP addresses.&nbsp; The same syntax is used to configure IP addresses on all interface, but that&#39;s beyond the scope here.&nbsp; Let&#39;s move on.</p>
<p>The next step is to configure an interface used to synchronize firewall state information.&nbsp; This is called the stateful failover link and allows the firewalls to sync their state tables like xlate, conn, etc. &nbsp;This allows the firewalls to fail without losing any active connection. &nbsp;You can use a dedicated interface for this as well, but it&#39;s very common to use the failover link we already configured.</p>
<blockquote>
<p>firewall(config)#failover link FOVER</p>
</blockquote>
<p>Yes, that&#39;s using the <em>link</em> command just to make this all confusing. &nbsp;I&#39;m not really sure why it&#39;s called that. &nbsp;I would think a name like &quot;state&quot; would be a little better.</p>
<p>Finally, you enable failover with a very complicated command.</p>
<blockquote>
<p>firewall(config)#failover</p>
</blockquote>
<p>That&#39;s it.&nbsp; If everything is configured correctly, you&#39;ll see something like this roll across the console and in your logs in a few seconds.</p>
<blockquote>
<p>Detected an Active mate<br />
		Beginning configuration replication from mate.</p>
</blockquote>
<p>To check the status, run a <em>show failover</em>.</p>
<blockquote>
<p>firewall# sh failover<br />
		<span style="background-color: rgb(255, 255, 0);">Failover On<br />
		Failover unit Primary</span><br />
		Failover LAN Interface: FOVER Ethernet0/3 (up)<br />
		Unit Poll frequency 200 milliseconds, holdtime 800 milliseconds<br />
		Interface Poll frequency 500 milliseconds, holdtime 25 seconds<br />
		Interface Policy 1<br />
		Monitored Interfaces 3 of 250 maximum<br />
		failover replication http<br />
		Version: Ours 8.2(1), Mate 8.2(1)<br />
		<span style="background-color: rgb(255, 255, 0);">Last Failover at: 13:33:10 UTC Nov 18 2010</span><br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This host: Primary &#8211; Active<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="background-color: rgb(255, 255, 0);">Active time: 89785 (sec)</span><br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; slot 0: ASA5510 hw/sw rev (2.0/8.2(1)) status (Up Sys)<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Interface OUTSIDE (1.2.3.4): Normal<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Interface DMZ (10.1.2.1): Normal<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Interface INSIDE (10.1.1.1): Normal<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; slot 1: empty<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Other host: Secondary &#8211; Standby Ready<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="background-color: rgb(255, 255, 0);">Active time: 0 (sec)</span><br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; slot 0: ASA5510 hw/sw rev (2.0/8.2(1)) status (Up Sys)<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Interface OUTSIDE (1.2.3.5): Normal<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Interface DMZ (10.1.2.2): Normal<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Interface INSIDE (10.1.1.2): Normal<br />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; slot 1: empty<br />
		&lt;SNIP&gt;</p>
</blockquote>
<p>The output shows a couple things.&nbsp; First, you can see that failover is enabled and that we&#39;re on the primary unit.&nbsp; We also see the last failover and how long each unit has been active.</p>
<p>Send any <strike>expensive PIX failover cables</strike> questions my way.</p>
<p>Audio commentary</p>
<div class="wp-about-author-containter-around" style="background-color:#ffffff;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/14352aa939196349e4b9f2a272ca5112?s=100&amp;d=&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://aconaway.com/author/jac/' title='Aaron Conaway'>Aaron Conaway</a></h3><p>I like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.</p><p><a href='http://aconaway.com' title='Aaron Conaway'>Website</a> - <a href='http://aconaway.com/author/jac/' title='More posts by Aaron Conaway'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://aconaway.com/2010/11/19/configuring-an-activepassive-asa-pair/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://aconaway.com/wp-content/uploads/2010/11/Configuring-an-Active-Passive-ASA-Pair.mp3" length="1703719" type="audio/mpeg" />
		</item>
		<item>
		<title>SLA Monitoring on the PIX/ASA</title>
		<link>http://aconaway.com/2010/10/15/sla-monitoring-on-the-pixasa/</link>
		<comments>http://aconaway.com/2010/10/15/sla-monitoring-on-the-pixasa/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 22:45:23 +0000</pubDate>
		<dc:creator>Aaron Conaway</dc:creator>
				<category><![CDATA[asa]]></category>
		<category><![CDATA[icmp]]></category>
		<category><![CDATA[ip sla]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[reliable]]></category>
		<category><![CDATA[route]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[sla]]></category>
		<category><![CDATA[static]]></category>

		<guid isPermaLink="false">http://aconaway.com/?p=1134</guid>
		<description><![CDATA[We&#39;re working on an data center design for a customer, and they&#39;ve dropped in two ISP links &#8211; each with it&#39;s own managed router and public IP space off one of the Ethernet interfaces. &#160;The idea is that they want to use the Internet links in an active-passive setup without getting their own IP addresses to avoid running BGP with the ISPs. &#160;To top it off, the headend of their control is an ASA cluster, so we wind up with two interface on the Internet to treat with a local security level. &#160;Oh, the joys of doing network design. Your first thought is probably to use the old fashioned floating static route where you have a weighted route that takes over if the primary route is withdrawn from the routing table. &#160;That only works if the next-hop of that route is no longer available&#8230;like when serial interface goes down and the next-hop isn&#39;t directly connected any more. &#160;This is Ethernet, though, so there&#39;s no way for the firewall doesn&#39;t know or doesn&#39;t care if a host on the network isn&#39;t there any more. &#160;This config has another problem, too. &#160;What about a scenario where the ISP&#39;s router is up, but [...]]]></description>
			<content:encoded><![CDATA[<p>We&#39;re working on an data center design for a customer, and they&#39;ve dropped in two ISP links &#8211; each with it&#39;s own managed router and public IP space off one of the Ethernet interfaces. &nbsp;The idea is that they want to use the Internet links in an active-passive setup without getting their own IP addresses to avoid running BGP with the ISPs. &nbsp;To top it off, the headend of their control is an ASA cluster, so we wind up with two interface on the Internet to treat with a local security level. &nbsp;Oh, the joys of doing network design.</p>
<p>Your first thought is probably to use the old fashioned floating static route where you have a weighted route that takes over if the primary route is withdrawn from the routing table. &nbsp;That only works if the next-hop of that route is no longer available&#8230;like when serial interface goes down and the next-hop isn&#39;t directly connected any more. &nbsp;This is Ethernet, though, so there&#39;s no way for the firewall doesn&#39;t know or doesn&#39;t care if a host on the network isn&#39;t there any more. &nbsp;This config has another problem, too. &nbsp;What about a scenario where the ISP&#39;s router is up, but it&#39;s interfaces are down? &nbsp;How about if there are routing issues farther upstream? &nbsp;You surely don&#39;t want to send traffic to a provider&#39;s router is the provider is having issues, right? &nbsp;</p>
<p>If you&#39;ve ever tried to do something similar on an IOS router, then you&#39;ve probably done IP SLA. &nbsp;An ASA has the same functionality, but it&#39;s just called SLA monitoring. &nbsp;You wind up with a config that is a very similar to IP SLA stuff on IOS routers, actually. &nbsp;I wrote <a href="http://aconaway.com/2008/04/23/reliable-static-routing/">a terrible blog post</a> about it a few years back, and several other bloggers talk about it as well, but the idea is that you have a process, called an SLA monitor on the ASA, that monitors an IP address by pinging it. &nbsp;You then create a track object that watches the monitor&#39;s status. &nbsp;This track object is applied to a static route, and, if the SLA monitor fails, the route is removed from the routing table. &nbsp;We&#39;ve all done something like this with HSRP tracking, so this shouldn&#39;t be totally foreign.</p>
<p>Let&#39;s take a look at the test network that I&#39;ve used to simulate the setup at the customer site.</p>
<p><a href="http://aconaway.com/wp-content/uploads/2010/10/asa-ip-sla1.png"><img alt="" class="alignnone size-medium wp-image-1144" height="300" src="http://aconaway.com/wp-content/uploads/2010/10/asa-ip-sla1-258x300.png" title="ASA IP SLA" width="258" /></a></p>
<p>The test is to have INSIDE1 communicate with TARGET. &nbsp;Each ISP knows where TARGET is through a huge EIGRP AS, but we want to detect any routing problems on ISP1. &nbsp;If we find a problem, we want to roll over to ISP2 on the BACKUP interface. &nbsp;What do we monitor, though? &nbsp;We can monitor the IP of the ISP&#39;s router at the data center, but we&#39;d miss any issues upstream. &nbsp;Let&#39;s monitor the IP of the second router on ISP1, which is 10.0.0.2. &nbsp;In the real world, we&#39;d fine a host somewhere deep on the Intertubes that we think won&#39;t go down very often. &nbsp;In our test, 10.0.0.2 is the closest thing we can find to that.</p>
<p>Let&#39;s create a beautiful symphony of ICMP generation. &nbsp;First, we create the SLA monitor.</p>
<blockquote>
<p>sla monitor 1<br />
		&nbsp;type echo protocol ipIcmpEcho 10.0.0.2 interface OUTSIDE<br />
		!<br />
		sla monitor schedule 1 life forever start-time now</p>
</blockquote>
<p>I think you can see that we are creating an ICMP echo process that will ping 10.0.0.2 on the OUTSIDE interface. &nbsp;The third line is what controls the start and stop of the process; in this case, we start now and don&#39;t ever finish thanks to the word <em>forever</em>. &nbsp;We can&#39;t use the SLA monitor directly on our routes, so let&#39;s create a track object.</p>
<blockquote>
<p>track 100 rtr 1 reachability</p>
</blockquote>
<p>Now we have track object 100 that looks to SLA monitor 1 for reachability. &nbsp;We apply this to the route just like we do on IOS. &nbsp;We&#39;ll go ahead and add the weighted route as well.</p>
<blockquote>
<p>route OUTSIDE 0.0.0.0 0.0.0.0 192.0.2.1 1 track 100<br />
		route BACKUP 0.0.0.0 0.0.0.0 192.0.2.129 240</p>
</blockquote>
<p>Now the default will go through 192.0.2.1 until 10.0.0.2 is unreachable. &nbsp;If that happens, the route is removed from the routing table, and the weighted default route will take over. &nbsp;That&#39;s all you need. &nbsp;Of course, I would create another track object for ISP2 so you can at least get a syslog message or SNMP trap if a problem happens over there, but you can probably get away with just the one.</p>
<p>If you&#39;ve ever done IP SLA on a router, you would call me on the fact that there&#39;s some stuff missing. &nbsp;If you don&#39;t force the ICMP packets to ISP1&#39;s router, the state of the SLA monitor will keep flopping; you flip to ISP2, the SLA check is healthy again, you flip back, the SLA check dies again&#8230;ad nauseum. &nbsp;That&#39;s not the case for the ASA, actually. &nbsp;Even though the default route has rolled over to the backup, the monitoring process continues to send requests to the old gateway.</p>
<p>Sometime I like it when my gear knows what I&#39;m trying to do; this is one of those times.</p>
<p>Send any <strike>stray ICMP packets</strike> questions my way.</p>
<p>Audio Commentary</p>
<div class="wp-about-author-containter-around" style="background-color:#ffffff;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/14352aa939196349e4b9f2a272ca5112?s=100&amp;d=&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://aconaway.com/author/jac/' title='Aaron Conaway'>Aaron Conaway</a></h3><p>I like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.</p><p><a href='http://aconaway.com' title='Aaron Conaway'>Website</a> - <a href='http://aconaway.com/author/jac/' title='More posts by Aaron Conaway'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://aconaway.com/2010/10/15/sla-monitoring-on-the-pixasa/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
<enclosure url="http://aconaway.com/wp-content/uploads/2010/10/SLA-Monitoring-on-the-PIX-ASA.mp3" length="2282126" type="audio/mpeg" />
		</item>
		<item>
		<title>More ASA Objects and Object-groups</title>
		<link>http://aconaway.com/2010/04/05/more-asa-objects-and-object-groups/</link>
		<comments>http://aconaway.com/2010/04/05/more-asa-objects-and-object-groups/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 18:22:38 +0000</pubDate>
		<dc:creator>Aaron Conaway</dc:creator>
				<category><![CDATA[asa]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[object-group]]></category>

		<guid isPermaLink="false">http://aconaway.com/?p=612</guid>
		<description><![CDATA[Object-groups.  God, I love them (most of the time).]]></description>
			<content:encoded><![CDATA[<p>A few years ago, I developed a Perl-based application that take a template file and pukes out standardized access rules for new hosts as they&#8217;re added to the network.  This works great for making sure that each host is able to be managed properly.  This solution, however, is not very flexible.  If I need to remove a host&#8217;s access, I may have to take out 20 rules individually.  That&#8217;s not really cool, so, at the suggestion of a coworker, I&#8217;m working on a solution that uses objects, object-groups, and nested object-groups.  This should minimize the configured rules and allow new host rules to be added and removed by simply adding hosts to object-groups.</p>
<p>Example time.  Let&#8217;s say you have a bunch of RFC1918 addresses behind your firewall that all need HTTP access to one network on the InterTubes.  First thing to do is to create the objects that will be involved; in this case, that&#8217;s all the networks and/or ranges.  To be more specific, 192.0.2.0/24 is the public IP to which the hosts need access.   The internal hosts are 192.168.0.0/24 and the IP range 10.0.0.1-25.  Yes, I know the names are terrible.</p>
<blockquote>
<pre>object network NET1
 subnet 192.0.2.0 255.255.255.0
object network NET2
 subnet 192.168.0.0 255.255.255.0
object network NET3
 range 10.0.0.1 10.0.0.25</pre>
</blockquote>
<p>Now, we can use some Snort-like configuration to create object-groups that include the objects we just created.  In this case, we&#8217;re creating an InterWebs-based object-group and another for local addresses.</p>
<blockquote>
<pre>object-group network REMOTE-NETS
 network-object object NET1
object-group network LOCAL-NETS
 network-object object NET2
 network-object object NET3</pre>
</blockquote>
<p>Now we can use these object-groups to create ACLs.   You&#8217;ve done this before, right?</p>
<blockquote>
<pre>access-list TEST-ACL extended permit tcp object-
   group LOCAL-NETS object-group REMOTE-NETS eq www</pre>
</blockquote>
<p>To be sure it worked as expected, let&#8217;s take a look at the ACLs.  The format sucks because the lines are so long; sorry about that.</p>
<blockquote>
<pre>firewall# show access-list TEST-ACL
access-list TEST-ACL; 7 elements; name hash: 0x5329ed72
access-list TEST-ACL line 1 extended permit tcp object-group LOCAL-NETS object-group REMOTE-NETS eq www 0x1abfa4a0
  access-list TEST-ACL line 1 extended permit tcp 192.168.0.0 255.255.255.0 192.0.2.0 255.255.255.0 eq www (hitcnt=0) 0x50797e0c
  access-list TEST-ACL line 1 extended permit tcp host 10.0.0.1 192.0.2.0 255.255.255.0 eq www (hitcnt=0) 0xa2159c9d
  access-list TEST-ACL line 1 extended permit tcp 10.0.0.2 255.255.255.254 192.0.2.0 255.255.255.0 eq www (hitcnt=0) 0x93f1c362
  access-list TEST-ACL line 1 extended permit tcp 10.0.0.4 255.255.255.252 192.0.2.0 255.255.255.0 eq www (hitcnt=0) 0x512fc827
  access-list TEST-ACL line 1 extended permit tcp 10.0.0.8 255.255.255.248 192.0.2.0 255.255.255.0 eq www (hitcnt=0) 0x7b11e96f
  access-list TEST-ACL line 1 extended permit tcp 10.0.0.16 255.255.255.248 192.0.2.0 255.255.255.0 eq www (hitcnt=0) 0xc302aa0e
  access-list TEST-ACL line 1 extended permit tcp 10.0.0.24 255.255.255.254 192.0.2.0 255.255.255.0 eq www (hitcnt=0) 0x2ea75962</pre>
</blockquote>
<p>Cool.  Everything looks great, and everyone should have the access they need.  If a new host with the IP of 172.16.0.28 comes online inside the network, you add a new nested object-group that includes that host.  Access is automagically updated, so there&#8217;s no need for more ACL lines.  Another method is to add the new host directly to the LOCAL-NETS object-group, but that&#8217;s going to limit the ways to address that box and related hosts in an ACL.  I suggest you just add the new object to the object-group.</p>
<p>As a bonus, you can also nest object-groups into each other.  For example, we can create an object-group that includes our the LOCAL-NETS and REMOTE-NETS object-groups.</p>
<blockquote>
<pre>object-group network ALL-NETS
 group-object LOCAL-NETS
 group-object REMOTE-NETS</pre>
</blockquote>
<p>I don&#8217;t know where you&#8217;d ever use that specific object-group, but you could use this technique in other ways.  I&#8217;m looking to create object-groups for each interface of the firewall and creating a super-object (my term) to allow the standard access stuff.  You could do the same for office networks; each office has it&#8217;s own object-group for access that is also nested in an object that provides basic access to the TubeWebs or something.  Use your imagination.  :)</p>
<p>Send any questions my way.</p>
<p>This article is based on an ASA 5505 running 8.3.1.  Most of the config above should be portable to any 8.x except for declaring the objects.  In other versions of 8.x, you may have to add host directly to the object-group.  Running on 7.x and below may be a different story.</p>
<p>Other reading:  <a href="http://aconaway.com/2009/10/01/object-groups-in-the-asafwsmpix/">http://aconaway.com/2009/10/01/object-groups-in-the-asafwsmpix/</a></p>
<p>Director&#8217;s Commentary:</p>
<div class="wp-about-author-containter-around" style="background-color:#ffffff;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/14352aa939196349e4b9f2a272ca5112?s=100&amp;d=&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://aconaway.com/author/jac/' title='Aaron Conaway'>Aaron Conaway</a></h3><p>I like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.</p><p><a href='http://aconaway.com' title='Aaron Conaway'>Website</a> - <a href='http://aconaway.com/author/jac/' title='More posts by Aaron Conaway'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://aconaway.com/2010/04/05/more-asa-objects-and-object-groups/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://aconaway.com/wp-content/uploads/2010/04/More-ASA-Objects-and-Object-groups.mp3" length="5465744" type="audio/mpeg" />
		</item>
		<item>
		<title>ASA 8.3.1 &#8211; Smart Tunnel and NAT Changes</title>
		<link>http://aconaway.com/2010/03/11/asa-8-3-1-smart-tunnel-and-nat-changes/</link>
		<comments>http://aconaway.com/2010/03/11/asa-8-3-1-smart-tunnel-and-nat-changes/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 00:20:54 +0000</pubDate>
		<dc:creator>Aaron Conaway</dc:creator>
				<category><![CDATA[asa]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[smart tunnel]]></category>

		<guid isPermaLink="false">http://aconaway.com/?p=571</guid>
		<description><![CDATA[I've got 8.3.1 on my home 5505 and I'm not afraid to use it.]]></description>
			<content:encoded><![CDATA[<p><em>I’ll start off with a warning.  I’ve been running 8.3.1 on my home 5505 for a few hours now.  Not only is this not really enough time for a thorough review, it’s also not the environment to test enterprise-level configurations.  There are also a lot of details missing that I just don’t know about yet, so please do some research on your own to figure out what’s going to break if you upgrade your ASA.</em></p>
<p>If you haven&#8217;t heard, Cisco has released version 8.3.1 of their ASA operating system.  I&#8217;m excited about this for only one reason &#8211; Smart Tunnels with tunnel policies.</p>
<p>If you&#8217;ve never heard of Smart Tunnels, you&#8217;re probably not alone.  I don&#8217;t know why they&#8217;re not more popular than they are, but I dig them.  A user connects to a URL, logs in, and a little applet loads on the machine that is used to proxy traffic through the ASA.  It doesn’t proxy all your traffic, though; only traffic from applications that you define are sent through the tunnel.  There is a huge problem that I can’t stand, though.  What if you need to SSH through the firewall and to your local LAN at the same time?  The smart tunnel applet doesn’t care or even know what you want to do; it tunnels all the traffic from the application.  Not good, eh?</p>
<p>The big change to this in 8.3.1 is the addition of tunnel policies to the smart tunnels.  According to <a href="http://www.cisco.com/en/US/docs/security/asa/asa83/release/notes/asarn83.html">the release notes</a>, you can now dictate which connections do and don’t go through the smart tunnel.  Now, I can configure the tunnel so that some traffic goes through the ASA to get to the production gear, but other traffic pukes out the NIC normally.  I know a lot of users who are going to like not having to log in and out all day.</p>
<p><em>Note: I may do an article on smart tunnels once everything slows down a bit.  It’s a solid way to implement a clientless VPN that doesn’t require administrative access on the machine to run.</em></p>
<p>The big feature that everyone is talking about, though, is the change to the way NAT is done.  Back in the day (that means earlier this morning), if I wanted to configure a static NAT, I’d do something like this to create a static and a service NAT to two different boxes.</p>
<blockquote>
<pre style="width: 137.06%">firewall(config)#static (inside,outside) 192.0.2.1 192.168.1.100
firewall(config)#static (inside,outside) tcp interface ssh 192.168.1.101 ssh</pre>
</blockquote>
<p>Now, you create an object and give that object all the attributes.  I think Cisco calls this auto-NAT.  I have no idea what the auto part means.  In our example, we would do something like this.</p>
<blockquote>
<pre style="width: 138.56%">firewall(config)#object network TESTHOST1
firewall(config-network-object)#host 192.168.1.100
firewall(config-network-object)#nat (inside,outside) static 192.0.2.1
firewall(config)#object network TEST2
firewall(config-network-object)#host 192.168.1.101
firewall(config-network-object)#nat (inside,outside) static interface service tcp ssh ssh
</pre>
</blockquote>
<p>I would say that the configuration is easier to parse with your eyes if the ASA didn’t break up the configuration into two parts.  If you were to do a <em>show run</em> and look for our configuration, you would have to look in two places.  The first part declares the object name and the host/subnet/IP range for which it’s associated.  The next part, which comes after the ACLs, declares the NAT stuff.</p>
<blockquote>
<pre style="width: 136.8%">object network TESTHOST1
 host 192.168.1.100
object network TESTHOST2
 host 192.168.1.101

[SNIP a billion lines of ACL]

pager lines 24
logging enable
logging timestamp
logging buffer-size 8192
logging buffered informational
logging asdm informational
logging host inside x.x.x.x
flow-export destination inside x.x.x.x 12345
mtu outside 1500
mtu guests 1500
mtu inside 1500
icmp unreachable rate-limit 1 burst-size 1
icmp permit x.x.x.0 255.255.255.0 inside
asdm image disk0:/asdm-631.bin
asdm history enable
arp timeout 14400

object network TESTHOST1
 nat (inside,outside) static 192.0.2.1

object network TESTHOST2
 nat (inside,outside) static interface service tcp ssh ssh</pre>
</blockquote>
<p>It may be simpler to configure, but it’s not simpler to figure out later.  I’d rather have single lines of <em>static</em> statements; at least I can use regex on those efficiently.</p>
<p>There is a bright side to the new NAT thing, though.  Because the NAT statements are configured in the object, you can now reference the real IP of the host in ACLs instead of the NATted IP.  This will help those of us who use firewalls with 488249284 interfaces and that many NATs for each host.  If we wanted to allow access to the SSH host in the example, we would write an ACL that allows access to 192.168.1.101 instead of finding the NATted address on that interface and building the rules to that address.</p>
<p>Speaking of ACLs, you can actually create a global access-group.  Instead of creating an ACL with rules and an access-group to bind to an interface, you can build one single ACL and configure an access-group with the <em>global</em> directive to basically apply that ACL to all interfaces.  A few quick tests show that you can have both interface and global access-group configured simultaneously and that interface ACLs will be executed first.  I need to do some more testing to figure out exactly how these work together.</p>
<p>Everyone should upgrade, right?  Nope.  I don’t ever upgrade to something cool just because it’s cool.  I also don’t like to have to buy more hardware to go up a minor revision.  Take a look at the the memory requirements for 8.3.1; every model up to the 5510 requires more than the base amount to upgrade.  I got lucky since my 5505 has 512MB in it already, but I would hate to have to justify quadrupling (!) the RAM in a 5540 just for some cool features.</p>
<p>Send any <span style="text-decoration: line-through;">rotten tomatoes</span> questions to me.</p>
<p>Sources:</p>
<ul>
<li><a href="http://www.cisco.com/en/US/docs/security/asa/asa83/release/notes/asarn83.html">8.3.1 Release Notes</a></li>
<li><a href="http://www.cisco.com/en/US/products/ps6120/products_configuration_example09186a0080affd2d.shtml">Smart Tunnels on 8.2</a></li>
<li><a href="http://www.cisco.com/en/US/docs/security/asa/asa82/configuration/guide/nat_staticpat.html">NAT on 8.2</a></li>
</ul>
<div class="wp-about-author-containter-around" style="background-color:#ffffff;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/14352aa939196349e4b9f2a272ca5112?s=100&amp;d=&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://aconaway.com/author/jac/' title='Aaron Conaway'>Aaron Conaway</a></h3><p>I like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.</p><p><a href='http://aconaway.com' title='Aaron Conaway'>Website</a> - <a href='http://aconaway.com/author/jac/' title='More posts by Aaron Conaway'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://aconaway.com/2010/03/11/asa-8-3-1-smart-tunnel-and-nat-changes/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Using SPF Records To Build Objects</title>
		<link>http://aconaway.com/2009/10/16/using-spf-records-to-build-objects/</link>
		<comments>http://aconaway.com/2009/10/16/using-spf-records-to-build-objects/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 19:50:13 +0000</pubDate>
		<dc:creator>Aaron Conaway</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[asa]]></category>
		<category><![CDATA[dig]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[fwsm]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[object-group]]></category>
		<category><![CDATA[pix]]></category>
		<category><![CDATA[records]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[spf]]></category>
		<category><![CDATA[txt]]></category>
		<category><![CDATA[_netblock]]></category>

		<guid isPermaLink="false">http://aconaway.com/?p=370</guid>
		<description><![CDATA[My biggest complain about modern firewalls is their lack of the ability to create rules based on URLs or HTTP streams; you have to open access between IP addresses.  Yes, I know there are other means to do that, but I want my ASA/PIX/FWSM to do it without making me do so much work. Anyway, the fact that you have to use IPs brings up some interesting problems.  Let&#8217;s say you have a server in a DMZ that needs to query Google for some content.  Since you&#8217;re a hard-ass network guy like I am, you tell the admin that they have provide the data flow they want to use &#8212; source IP, destination IP, protocol, port.  They come back and tell you that they need their server to connect via HTTP to 74.125.45.100.  You put in the rules as given, but the IP has suddenly changed on you. Google (and lots of other big sites) uses some tricks to keep the load down on their servers and to help with availability, and one such trick is to use round robin DNS, which rotates the A record so everyone doesn&#8217;t slam the same boxes.  You can query google.com once and get [...]]]></description>
			<content:encoded><![CDATA[<p>My biggest complain about modern firewalls is their lack of the ability to create rules based on URLs or HTTP streams; you have to open access between IP addresses.  Yes, I know there are other means to do that, but I want my ASA/PIX/FWSM to do it without making me do so much work.</p>
<p>Anyway, the fact that you have to use IPs brings up some interesting problems.  Let&#8217;s say you have a server in a DMZ that needs to query Google for some content.  Since you&#8217;re a hard-ass network guy like I am, you tell the admin that they have provide the data flow they want to use &#8212; source IP, destination IP, protocol, port.  They come back and tell you that they need their server to connect via HTTP to 74.125.45.100.  You put in the rules as given, but the IP has suddenly changed on you.</p>
<p>Google (and lots of other big sites) uses some tricks to keep the load down on their servers and to help with availability, and one such trick is to use round robin DNS, which rotates the A record so everyone doesn&#8217;t slam the same boxes.  You can query google.com once and get an address, but, when you query it again, you may get a different address.  That means that when your new rules don&#8217;t work, you have to check the logs, see what got denied, open that up, rinse, and repeat.  That sucks.</p>
<p>An easier way might be to create an <a title="AConaway.com -- Tag/object-group" href="http://aconaway.com/tag/object-group/"><em>object-group</em></a> that includes IPs as you discover them.  You put in rules based on an object-group, then, when it fails, you just add to the object-group so you don&#8217;t have to put in any more rules.  The problem is that you&#8217;ll spend a lot of time building up a good baseline.  If only there were a way to get a list of IP addresses that Google uses.  Hmmm.  *segue*</p>
<p>Have you ever heard of <a title="OpenSPF.org - SPF: Project Overview" href="http://www.openspf.org/">SPF</a> netblock records?  SPF is an email security mechanism that allows an email server to verify that an email message is coming from an authorized email source.  In other words, when a mail server receives mail, it can check to see if the sending server is actually allowed to send mail on behalf of the source domain.  It supposed to cut down on spam and whatnot, but I don&#8217;t follow it closely enough to know if it&#8217;s working.  The moral of the story is that is involves a list of IP addresses that an organization maintains; Google happens to be a participant in SPF.</p>
<p>If you query for the TXT record _netblocks.google.com, you get back a text record that looks like this.</p>
<blockquote><p>[jac@holland ~]$ dig +short txt _netblocks.google.com<br />
&#8220;v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ip4:64.18.0.0/20 ip4:207.126.144.0/20 ip4:173.194.0.0/16 ?all&#8221;</p></blockquote>
<p>This record includes all IP addresses that Google says is authorized to send email from google.com.  That&#8217;s a lot of IP addresses, isn&#8217;t it?  It might make sense that this list might also be the definitive list of Google production IPs.</p>
<p>My company has used this TXT record in the past to open access to Google.  We had an app that needed to query Google maps, and one of our engineers was tired of nickel and diming it to death, so he found the SPF block and put them all in.  Works like a champ.</p>
<p>There are always dangers when you rely on information from somebody else, though, right?  Google&#8217;s usually pretty good about stuff like this, but what if you did the same for another company who only half-heartedly kept their records up-to-date?  You may only have half of their IPs in your object-gropu.  You might even wind up opening access to or from a cable modem system or from another company who bought the IP addresses.</p>
<p>I&#8217;ll also  note that there aren&#8217;t that many domains using this technique, so finding SPF netblock records may be a challenge.  It&#8217;s worth the time to do a simply query, though; it might save you some time.</p>
<p>Send any <span style="text-decoration: line-through;">carved pumpkins</span> questions my way.</p>
<div class="wp-about-author-containter-around" style="background-color:#ffffff;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/14352aa939196349e4b9f2a272ca5112?s=100&amp;d=&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://aconaway.com/author/jac/' title='Aaron Conaway'>Aaron Conaway</a></h3><p>I like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.</p><p><a href='http://aconaway.com' title='Aaron Conaway'>Website</a> - <a href='http://aconaway.com/author/jac/' title='More posts by Aaron Conaway'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://aconaway.com/2009/10/16/using-spf-records-to-build-objects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Object Groups in the ASA/FWSM/PIX</title>
		<link>http://aconaway.com/2009/10/01/object-groups-in-the-asafwsmpix/</link>
		<comments>http://aconaway.com/2009/10/01/object-groups-in-the-asafwsmpix/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 15:00:12 +0000</pubDate>
		<dc:creator>Aaron Conaway</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[asa]]></category>
		<category><![CDATA[fwsm]]></category>
		<category><![CDATA[group]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[object-group]]></category>
		<category><![CDATA[pix]]></category>

		<guid isPermaLink="false">http://aconaway.com/?p=372</guid>
		<description><![CDATA[I can&#8217;t believe I haven&#8217;t talked about object-groups yet.  I had a whole other blog entry written up, and, when I went to link things over, I realized I couldn&#8217;t find an intro to it.  Here it goes. Welcome to the modern world.  A world of wonder.  A world of quickly-advancing technology.  A world where clusters of machines sit behind load balancers for scalability and availability.  A world where those clusters need access to other clusters.  A world where your firewall rulebase gets so big that it&#8217;s unreadable without some help. Enough with the drama already.  I would say I hate the cheesy stuff, but I think my whole blog is nothing but cheesy stuff, right?  To the point.  Enterprise firewall configurations can get quite large with ACLs applied in different directions to different interfaces.  Our ACL entries number in the 6000 range, but the firewall we&#8217;re running says we&#8217;re only at 5% utilization in the ACLE memory space. That means that our not-top-of-the-line firewall is designed to handle 120k lines of ACLs.  That can be quite a handful to configure by hand.  There may be an easier-to-maintain solution, though. Let&#8217;s say you have a cluster of servers behind your [...]]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t believe I haven&#8217;t talked about <em>object-groups</em> yet.  I had a whole other blog entry written up, and, when I went to link things over, I realized I couldn&#8217;t find an intro to it.  Here it goes.</p>
<p>Welcome to the modern world.  A world of wonder.  A world of quickly-advancing technology.  A world where clusters of machines sit behind load balancers for scalability and availability.  A world where those clusters need access to other clusters.  A world where your firewall rulebase gets so big that it&#8217;s unreadable without some help.</p>
<p>Enough with the drama already.  I would say I hate the cheesy stuff, but I think my whole blog is nothing but cheesy stuff, right?  To the point.  Enterprise firewall configurations can get quite large with ACLs applied in different directions to different interfaces.  Our ACL entries number in the 6000 range, but the firewall we&#8217;re running says we&#8217;re only at 5% utilization in the ACLE memory space. That means that our not-top-of-the-line firewall is designed to handle 120k lines of ACLs.  That can be quite a handful to configure by hand.  There may be an easier-to-maintain solution, though.</p>
<p>Let&#8217;s say you have a cluster of servers behind your CSM that all need to access a database.   Since there&#8217;s a nice ASA, FWSM, or PIX between the servers and database (as there should be), you have to open up access for this connection.  Let&#8217;s say that you have four servers with the IPs of 192.168.100.101-104 that need access to 10.10.10.1 on the mySQL port (TCP/3306).</p>
<blockquote>
<pre>access-list LIST1 permit tcp host 192.168.100.101 host 10.10.10.1 eq 3306
access-list LIST1 permit tcp host 192.168.100.102 host 10.10.10.1 eq 3306
access-list LIST1 permit tcp host 192.168.100.103 host 10.10.10.1 eq 3306
access-list LIST1 permit tcp host 192.168.100.104 host 10.10.10.1 eq 3306</pre>
</blockquote>
<p>Where are your remarks?  Why don&#8217;t you document something for once in your life?</p>
<p>Anyway, that&#8217;s easy, right.  Four configuation lines isn&#8217;t so bad, but some of the server admins come to you one day and tell you that the company actually marketed the new web app and that tey are adding 37 more servers to the cluster.  Now the 37 new servers need the same rules, right?  The server dudes also tell you that, since the app has grown so much, the DBAs have set up a split-read-write scenario where the current database handles the reads and a new database handles the writes.  That&#8217;s 78 new rules (37 to the old and 41 for the new).  That&#8217;s a lot of rules.</p>
<p><em>Object-groups</em> to the rescue.  An object-group is a logical group of objects (duh!) that you can use to create ACLEs.  You can create a group of hosts, a group of network, or a group of ports.  For our example, let&#8217;s create an object-group that includes all the hosts in the new huge cluster.</p>
<blockquote>
<pre>object-group network CLUSTER1
   description The Huge Cluster (that's what she said)
   network-object host 192.168.100.101
   network-object host 192.168.100.102
...
   network-object host 192.168.100.141</pre>
</blockquote>
<p>What do we do with it, though?  You treat it (almost) just like it was a host in an ACL.  Remember we wanted to open access to the old database on TCP/3306, right?</p>
<blockquote>
<pre>access-list LIST1 permit tcp object-group CLUSTER1 host 10.10.10.1 eq 3306</pre>
</blockquote>
<p>If you do a show access-list LIST1 now, you&#8217;ll see that a new rules has been added for each object in the object-group.  It should look something like this.</p>
<blockquote>
<pre>access-list LIST1 permit tcp object-group CLUSTER1 host 10.10.10.1 eq 3306
   access-list LIST extended permit tcp host 192.168.100.101 host 10.10.10.1 eq 3306 (hitcnt=0)
   access-list LIST extended permit tcp host 192.168.100.102 host 10.10.10.1 eq 3306 (hitcnt=0)
...
   access-list LIST extended permit tcp host 192.168.100.141 host 10.10.10.1 eq 3306 (hitcnt=0)</pre>
</blockquote>
<p>Notice that the firewall created 41 rules for you out of your one configured line, but now the rules are indented. The indention means that the rules is generated automagically instead of by hand. Since you can only take out rules that you put in by hand, so you can&#8217;t take out the line allowing 192.168.100.123 access; it&#8217;s an all-or-nothing scenario.  Be aware of that.</p>
<p>You can use object-group for ports, too.  Let&#8217;s add to our example and say that the cluster will need to access the memcached instance on the database server as well.  Those processes run on TCP ports 15000 &#8211; 15100.</p>
<p>First we build an object-group for the ports we need.</p>
<blockquote>
<pre>object-group service DBPORTS
   description mySQL and memcached ports
   service-object tcp eq 3306
   service-object tcp range 15000 15100</pre>
</blockquote>
<p>Now let&#8217;s apply it to the ACL.</p>
<blockquote>
<pre>access-list LIST1 permit tcp object-group CLUSTER1 host 10.10.10.1 object-group DBPORT</pre>
</blockquote>
<p>What does the ACL look like now?  Well, it&#8217;s a <a title="Wikipedia.com -- Dusenberg" href="http://en.wikipedia.org/wiki/Duesenberg">Duesenberg</a>.</p>
<pre>access-list LIST1 permit tcp object-group CLUSTER1 host 10.10.10.1 object-group DBPORTS
   access-list LIST extended permit tcp host 192.168.100.101 host 10.10.10.1 eq 3306 (hitcnt=0)
   access-list LIST extended permit tcp host 192.168.100.101 host 10.10.10.1 eq 15000 (hitcnt=0)
...
   access-list LIST extended permit tcp host 192.168.100.101 host 10.10.10.1 eq 15099 (hitcnt=0)
   access-list LIST extended permit tcp host 192.168.100.101 host 10.10.10.1 eq 15100 (hitcnt=0)
...
   access-list LIST extended permit tcp host 192.168.100.141 host 10.10.10.1 eq 3306 (hitcnt=0)
   access-list LIST extended permit tcp host 192.168.100.141 host 10.10.10.1 eq 15000 (hitcnt=0)
...
   access-list LIST extended permit tcp host 192.168.100.141 host 10.10.10.1 eq 15099 (hitcnt=0)
   access-list LIST extended permit tcp host 192.168.100.141 host 10.10.10.1 eq 15100 (hitcnt=0)</pre>
<p>That&#8217;s a lot of ACL entries for one configuration line, isn&#8217;t it?  Let&#8217;s see.  102 ports times 41 servers is 4182 lines in the ACL.  You can see how might be to your advantage to use object-groups at times.</p>
<p>Send any <span style="text-decoration: line-through;">candy corn</span> questions my way.</p>
<div class="wp-about-author-containter-around" style="background-color:#ffffff;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/14352aa939196349e4b9f2a272ca5112?s=100&amp;d=&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://aconaway.com/author/jac/' title='Aaron Conaway'>Aaron Conaway</a></h3><p>I like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.</p><p><a href='http://aconaway.com' title='Aaron Conaway'>Website</a> - <a href='http://aconaway.com/author/jac/' title='More posts by Aaron Conaway'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://aconaway.com/2009/10/01/object-groups-in-the-asafwsmpix/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ASA and Proxy ARP</title>
		<link>http://aconaway.com/2009/09/11/asa-and-proxy-arp/</link>
		<comments>http://aconaway.com/2009/09/11/asa-and-proxy-arp/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 14:37:45 +0000</pubDate>
		<dc:creator>Aaron Conaway</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[arp]]></category>
		<category><![CDATA[asa]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[fwsm]]></category>
		<category><![CDATA[nat]]></category>
		<category><![CDATA[pix]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[syn]]></category>

		<guid isPermaLink="false">http://aconaway.com/?p=362</guid>
		<description><![CDATA[Wow.  A new entry.  Everyone sit down before you pass out. I&#8217;ve got a real-world example for you today.  We have an ASA 5540 installed at a business unit with interfaces in multiple networks, including one containing the production servers and another containing the accounting servers.  The production network sits on a 7600 that&#8217;s not ours, so, to avoid IP conflicts, we are statically NATting connections into that network.  The 7600 has with many, many VLANs, and, since the firewall production servers are on different VLANs, there&#8217;s an interface VLAN between us.  Sounds pretty straightforward, but it just wasn&#8217;t working when we try to connect between the interfaces. When we tried to connect from the accounting servers to the production gear, the firewall saw the SYN, built the outbound connection, sent the packet on, and waited.  Nothing back.  SYN timeout.  The vendor on the production side checked the routing.  Fine.  Checked the ACLs.  None installed.  When the (other) vendor ran TCPDump on the production servers, they saw the SYN landing and the SYN-ACK leaving, but it never got to the ASA.  We even looked at the inline IDS and still didn&#8217;t see the SYS-ACK hitting the firewall.  It was simply [...]]]></description>
			<content:encoded><![CDATA[<p>Wow.  A new entry.  Everyone sit down before you pass out.</p>
<p>I&#8217;ve got a real-world example for you today.  We have an ASA 5540 installed at a business unit with interfaces in multiple networks, including one containing the production servers and another containing the accounting servers.  The production network sits on a 7600 that&#8217;s not ours, so, to avoid IP conflicts, we are statically NATting connections into that network.  The 7600 has with many, many VLANs, and, since the firewall production servers are on different VLANs, there&#8217;s an interface VLAN between us.  Sounds pretty straightforward, but it just wasn&#8217;t working when we try to connect between the interfaces.</p>
<p>When we tried to connect from the accounting servers to the production gear, the firewall saw the SYN, built the outbound connection, sent the packet on, and waited.  Nothing back.  SYN timeout.  The vendor on the production side checked the routing.  Fine.  Checked the ACLs.  None installed.  When the (other) vendor ran TCPDump on the production servers, they saw the SYN landing and the SYN-ACK leaving, but it never got to the ASA.  We even looked at the inline IDS and still didn&#8217;t see the SYS-ACK hitting the firewall.  It was simply not getting passed on.</p>
<p>I got tired of walking people through stuff over the phone, so I drove up there to see what I could find.  When I checked the ARP table on the 7600, I noticed that the statically NATted IP we were serving was conveniently <em>incomplete</em>.  For those who don&#8217;t know, that means that the 7600 was ARPing for the address, but nothing was answering for it.  Obviously, our ASA should be answering, right?  To make the situation a little more dire, I did a <em>debug arp</em> (or something close) on the firewall and generated an ARP request; the firewall saw the request but just ignored it.  Ugh!</p>
<p>If you couldn&#8217;t tell by the title, it turns out that the solution was to enable proxy ARP.  It&#8217;s off by default for good reason, but here&#8217;s how to enable it.</p>
<blockquote>
<pre>no sysopt noproxyarp PRODUCTIONINTERFACE</pre>
</blockquote>
<p>Enabling proxy ARP, however, could be a security issue.  Any time you use the word &#8220;proxy&#8221;, there is a potential to spoof addresses, and, in this case, an attacker could (potentially) use the firewall to discover hosts that are on the other side of it.  That wouldn&#8217;t be good.</p>
<p>A more-secure solution is to use static ARP entries.  In our case, we added a static ARP entry on the 7600 that points our NATted IP to the MAC address of the firewall.  Now, when you ping the IP, the 7600 doesn&#8217;t ARP; it already has the MAC in the ARP table, so it just sends the packet on.  Since we only have one static translation in this case, it&#8217;s no big deal, but, if we had a whole class-C of addresses to NAT, there would be a management problem.</p>
<p>A part of me wants to do the simple thing and enable proxy ARP, but the vast majority of article, blogs, forums, lists, etc., that I&#8217;ve ready say to turn it off for security and efficiency purposes.  The more I think about it, though, the more Iwonder why proxy ARP needs to be enabled to make staic NATs work.  I looked back at an old PIX running 6.x,  and proxy ARP is on by default.  The same holds true for an FWSM running 2.x.  I&#8217;m going to have to ask Cisco what&#8217;s up with that.</p>
<p>Send any <span style="text-decoration: line-through;">misconfigured subnet masks</span> questions my way.</p>
<div class="wp-about-author-containter-around" style="background-color:#ffffff;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/14352aa939196349e4b9f2a272ca5112?s=100&amp;d=&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://aconaway.com/author/jac/' title='Aaron Conaway'>Aaron Conaway</a></h3><p>I like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.</p><p><a href='http://aconaway.com' title='Aaron Conaway'>Website</a> - <a href='http://aconaway.com/author/jac/' title='More posts by Aaron Conaway'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://aconaway.com/2009/09/11/asa-and-proxy-arp/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Port Forwarding on the ASA/FWSM/PIX</title>
		<link>http://aconaway.com/2008/05/27/port-forwarding-on-the-asafwsmpix/</link>
		<comments>http://aconaway.com/2008/05/27/port-forwarding-on-the-asafwsmpix/#comments</comments>
		<pubDate>Tue, 27 May 2008 13:01:59 +0000</pubDate>
		<dc:creator>Aaron Conaway</dc:creator>
				<category><![CDATA[asa]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[fwsm]]></category>
		<category><![CDATA[nat]]></category>
		<category><![CDATA[pix]]></category>

		<guid isPermaLink="false">http://aconaway.com/2008/05/27/port-forwarding-on-the-asafwsmpix/</guid>
		<description><![CDATA[Here&#8217;s a simple one since I haven&#8217;t updated in a while. I have my ASA 5505 at home and want to forward TCP/80 traffic to my public IP to my webserver at 10.10.10.10. There are two steps here &#8212; forward the port and open the ACL. To forward the port, I would use the static directive, but there are two ways to do that. I can either set up a one-to-one NAT or a port redirection. In the one-to-one NAT, you have a outside address that&#8217;s mapped directly to an inside address, and any traffic to that IP is passed to the inside host (if it passes ACLS, of course). One of the limitation, though, of using this setup is that you can&#8217;t use that IP as your PAT address, and, since I only have one IP, no other inside hosts would have a outside address to which to be NATted. The other method &#8212; port redirection &#8212; is a much better solution. In this setup, I actually forward a protocol/port on a outside address to a protocol/port on an inside address. Since there are other ports available on that outside address, the address is still available for other hosts [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a simple one since I haven&#8217;t updated in a while.  I have my ASA 5505 at home and want to forward TCP/80 traffic to my public IP to my webserver at 10.10.10.10.  There are two steps here &#8212; forward the port and open the ACL.</p>
<p>To forward the port, I would use the <em>static </em>directive, but there are two ways to do that.  I can either set up a one-to-one NAT or a port redirection.  In the one-to-one NAT, you have a outside address that&#8217;s mapped directly to an inside address, and any traffic to that IP is passed to the inside host (if it passes ACLS, of course).  One of the limitation, though, of using this setup is that you can&#8217;t use that IP as your PAT address, and, since I only have one IP, no other inside hosts would have a outside address to which to be NATted.  The other method &#8212; port redirection &#8212; is a much better solution.  In this setup, I actually forward a protocol/port on a outside address to a protocol/port on an inside address.  Since there are other ports available on that outside address, the address is still available for other hosts to use as a NAT address.</p>
<p>In an enterprise, I would probably use an address out of my pool for the port forwarding, but, since I only have one address at home, I&#8217;ve got another decision to make.  I can configure the <em>static </em>statement with an IP address or I can use the reserved word <em>interface </em>to indicate the IP that is on an interface.  This is a great feature, actually, since my outside IP could potentially change without notice.  I&#8217;m going to use that feature, too.</p>
<p><code>static (inside,outside) tcp interface 80 10.10.10.10 80</code></p>
<p>This is pretty simple, but I&#8217;ll explain.  The ASA will take any request that comes in on TCP/80 (HTTP) on its outside interface&#8217;s IP and forward it to TCP/80 of 10.10.10.10.  If my webserver ran on TCP/81 on my box, I could just change the last 80 to 81 to make it work.</p>
<p>The port is redirecting, but I still need to open the ACL.  When that&#8217;s done, everything should work as expected.</p>
<div class="wp-about-author-containter-around" style="background-color:#ffffff;"><div class="wp-about-author-pic"><img alt='' src='http://1.gravatar.com/avatar/14352aa939196349e4b9f2a272ca5112?s=100&amp;d=&amp;r=G' class='avatar avatar-100 photo' height='100' width='100' /></div><div class="wp-about-author-text"><h3><a href='http://aconaway.com/author/jac/' title='Aaron Conaway'>Aaron Conaway</a></h3><p>I like to lean my head to the left, hit it with the palm of my right hand, and document what knowledge falls out.</p><p><a href='http://aconaway.com' title='Aaron Conaway'>Website</a> - <a href='http://aconaway.com/author/jac/' title='More posts by Aaron Conaway'>More Posts</a> </p></div></div>]]></content:encoded>
			<wfw:commentRss>http://aconaway.com/2008/05/27/port-forwarding-on-the-asafwsmpix/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

