<?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>The ProStructure Blog &#187; Enterprise IT</title>
	<atom:link href="http://www.prostructure.com/blog/category/enterprise-it/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.prostructure.com/blog</link>
	<description>A blog about high-end IT Infrastructure and Security</description>
	<lastBuildDate>Mon, 12 Jul 2010 21:34:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Are you monitoring the integrity of your digital assets?</title>
		<link>http://www.prostructure.com/blog/2010/05/11/are-you-monitoring-the-integrity-of-your-digital-assets/</link>
		<comments>http://www.prostructure.com/blog/2010/05/11/are-you-monitoring-the-integrity-of-your-digital-assets/#comments</comments>
		<pubDate>Tue, 11 May 2010 16:16:49 +0000</pubDate>
		<dc:creator>micah</dc:creator>
				<category><![CDATA[Enterprise IT]]></category>
		<category><![CDATA[Web Operations]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.prostructure.com/blog/?p=83</guid>
		<description><![CDATA[At this point in time, Your organization most likely uses its website to deliver key business data to your customers.  This could include the delivery of product marketing information, contact information, or product support documentation.  Your product may be your website if you deliver your application in a SaaS or cloud based distribution model.  As [...]]]></description>
			<content:encoded><![CDATA[<p>At this point in time, Your organization most likely uses its website to deliver key business data to your customers.  This could include the delivery of product marketing information, contact information, or product support documentation.  Your product may be your website if you deliver your application in a SaaS or cloud based distribution model.  As a customer, when I pay for something, I am telling that company that I trust they can deliver not only what they sold me as a product, but all necessary services that come with supporting that product.  In other words, I am telling that company that I trust them.  As part of this trust relationship, we expect that the systems that enable this content delivery, such as web servers, are trustworthy, and the integrity of the content has also been ensured.</p>
<p>Organizations may not have to work hard to initially develop this trust relationship with their customer.  What an organization may not be doing is working hard to maintain this trust relationship.  If the integrity of these assets are challenged, there is a potential risk of destroying this trust relationship, which could be cause for a costly recovery attempt of this customer trust, or complete customer loss.  Ensuring the integrity of your organization&#8217;s digital assets should be considered a foundational component of any organization&#8217;s security practice.</p>
<p>When we speak of digital assets, we not only include the traditional media data types including images, audio, and video, but all other content produced by your company that exists in a persistent state on disk.  In a web server environment we would most likely be dealing the with following types of data:</p>
<ul>
<li>Html, Javascript, CSS, and embedded web objects</li>
<li>PHP, Perl, .NET, and other application code</li>
<li>Non-HTML Document types such as PDF or Office files</li>
<li>Images, Audio, and Video</li>
</ul>
<p>We were recently employed to review the state of a customer&#8217;s environment following a recent intrusion.  As with a portion of the environments we work in today, the services provided included web content and application delivery provided by Apache running on Linux.  While Apache does provide access logging for files requested from it, it does not maintain state regarding the integrity of the files it serves. Following an intrusion, identifying the the attack vector is extremely important in providing future security of this environment but should not be the only consideration.</p>
<p>The following questions need to be asked concurrently:</p>
<ul>
<li>What organizational or customer data was exposed?</li>
</ul>
<ul>
<li>Was any data modified and what is the potential impact to our customers?</li>
</ul>
<p>In high traffic environments, it can be extremely difficult to answer both of these questions quickly, which in turn can prolong the delivery of customer communication or notification for external entities that may have a stake in the exposed data.  To speed up the time to derive an answer to both of these questions, there are two methods that are available to expedite this process.</p>
<p>First, the majority of server operating systems in production today have kernel facilitated auditing capability bundled with the operating system.  Linux provides the Linux Audit Subsystem.  Microsoft Windows Server including 2003 and 2008 provide auditing capability.  Solaris, MacOS X, and the BSD family of operating systems also implement audit facilities.  Each of these respective implementations provide the ability to monitor file access and modification events and produce audit trail which can be used to quickly determine which critical assets were accessed or modified.  Although the deployment of auditing policy is not trivial, the benefit can easily be measured if file integrity is violated and you are able to effectively determine the targeted assets and the associated scope of exposure.</p>
<p>Secondly, organizations should deploy a file integrity monitoring system such as Tripwire or Samhain.  These systems utilize one way cryptographic functions (also known as message digest algorithms) such as MD5, SHA1, SHA2, or Tiger, to create a catalog of computed hashes of  files covered by the monitoring software&#8217;s defined policy.  Following the a baseline definition process, these systems monitor filesystem changes against prior hash calculations, and in some cases, against known bad hash values associated with exploit, rootkit code, and other potential malware.   When a change event is discovered, notifications can be delivered to those accountable.</p>
<p>The data generated by each of these tools should be streamed via encrypted transport to a centralized syslog server.   This centralized server should exist in a logically distinct network segment from all other nodes in the environment.   Because this server essentially becomes the gold copy record for file integrity in your environment as related to file assets, extreme care should be used to ensure the validity of logs captured.  This includes utilizing file integrity monitoring and limiting access to those who have a need to know.</p>
<p>The employment of these systems do not provide protection against intrusion but can ease the burden of cleaning up the mess and help organizations identify impact.  While this does not completely mitigate potential loss of trust with your customers, it allows you to effectively measure whether or not their trust was violated and the overall level of exposure.  In the future, we will be providing direction on how these logs can be utilized to provide real-time alerting of an attack in progress, and what you can do to decrease your time to react.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prostructure.com/blog/2010/05/11/are-you-monitoring-the-integrity-of-your-digital-assets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vulnerable open source components installed in commercial products</title>
		<link>http://www.prostructure.com/blog/2010/04/19/vulnerable-open-source-components-installed-in-commercial-products/</link>
		<comments>http://www.prostructure.com/blog/2010/04/19/vulnerable-open-source-components-installed-in-commercial-products/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 22:15:13 +0000</pubDate>
		<dc:creator>psmythe</dc:creator>
				<category><![CDATA[Enterprise IT]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.prostructure.com/blog/?p=79</guid>
		<description><![CDATA[&#8220;What do I do about the vulnerable open source components installed in my commercial products?&#8221; I have been asked that question many times, and I wish the reply I had to deliver was one with a better message.  Unfortunately we often find vulnerable components embedded in commercial products.  Vulnerabilities that can lead to the compromise [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;What do I do about the vulnerable open source components installed in my commercial products?&#8221;</p>
<p>I have been asked that question many times, and I wish the reply I had to deliver was one with a better message.  Unfortunately we often find vulnerable components embedded in commercial products.  Vulnerabilities that can lead to the compromise of the system they are installed in.  We have seen this in both software products that companies are actively shipping, as well as in software and appliances other clients have purchased and installed.  When we request that the vulnerable components be upgraded, the change request very rarely makes it very far up the chain.  The reasoning (when one is actually given) is other &#8220;feature enhancements&#8221; and new functionality for customers and sales are a higher priority.</p>
<p>While performing security audits against organizations this is an issue that comes up frequently.  What we have seen is that unless the client represents a significant source of revenue or other opportunities for the company shipping vulnerable products, getting them to change can be a very difficult and time consuming process that may not yield major results in any workable time frame.  Baring being a significant revenue source, being a potentially good or bad publicity source could also be a way to get them to be a little more helpful.  For instance having a large scale outage caused by an exploit of one of the vulnerably pieces of software they are using.  However I do not really recommend waiting to be exploited as a viable option.</p>
<p>I am not suggesting that you do not open a support ticket with the company when you do find an issue; however receiving an unworried/unconcerned response is something you should expect.  Having a proof of concept attack against their software that you can show them would be one way to help get their attention, but that can be time consuming and costly.</p>
<p>Instead most organizations are forced to mitigate the issue themselves.  While waiting for the software companies to upgrade or fix the issues you have found, you need to mitigate and create controls around all of the known issues.  In general this can be accomplished through a six step process.</p>
<ol>
<li>Segment your network into different zones based upon function, confidentiality and importance of data, etc.</li>
<li>Deploy host based and network based firewalls to restrict access to specific ports, sources, and/or destinations.  The firewalls should restrict both what connections can be made in an attempt to exploit a vulnerability, as well as to limit what damage or access a compromised computer can create.  You do not want a compromised server downloading tools or initiating more attacks if you can help it.</li>
<li>Deploy and USE an operational Alerting and Monitoring system, configured to detect outages, error conditions, and anomalies, .  This includes traffic flows, service and device uptime, and SLA measurements, as well as the gathering of syslog data and appropriate snmp-traps.</li>
<li>Deploy a network and/or host based IDS to watch for any attempts at exploiting known vulnerabilities or traffic anomalies.</li>
<li>Deployment of an event correlation system (such as Cisco’s MARS, RSA’s enVision, or Splunk) to help manage the massive amounts of server, firewall, and IDS logs.</li>
<li>Continually monitor, maintain, and manage your environment.  There are no easy “place it and forget it” solutions to security issues.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.prostructure.com/blog/2010/04/19/vulnerable-open-source-components-installed-in-commercial-products/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Add Categories/Meeting Types to SharePoint 2010 Calendar</title>
		<link>http://www.prostructure.com/blog/2010/03/29/add-categoriesmeeting-types-to-sharepoint-2010-calendar/</link>
		<comments>http://www.prostructure.com/blog/2010/03/29/add-categoriesmeeting-types-to-sharepoint-2010-calendar/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 23:05:05 +0000</pubDate>
		<dc:creator>Amber Pham</dc:creator>
				<category><![CDATA[Enterprise IT]]></category>
		<category><![CDATA[Web Operations]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Calendar]]></category>
		<category><![CDATA[Categories]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.prostructure.com/blog/?p=76</guid>
		<description><![CDATA[I recently had a client ask if additional categories could be added to the choice list in the SharePoint 2010 Calendar Web Part.  These categories are in the pick list when you create a new calendar item from the SharePoint interface. This is how to change the categories: 1. Go to the calendar web part [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had a client ask if additional categories could be added to the choice list in the SharePoint 2010 Calendar Web Part.  These categories are in the pick list when you create a new calendar item from the SharePoint interface.</p>
<p>This is how to change the categories:<br />
1. Go to the calendar web part from the browser.<br />
2. Under the Calendar Tools tab, click the Calendar tab.<br />
3. Choose List Settings.<br />
4. Scroll down to the Columns heading.<br />
5. Click Category.<br />
6. Under the Additional Column Settings heading, there is a text box with the categories, and above the box reads: &#8220;Type each choice on a separate line.&#8221;<br />
7. Add or remove categories, then click OK.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prostructure.com/blog/2010/03/29/add-categoriesmeeting-types-to-sharepoint-2010-calendar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint 2010 Edition Comparison</title>
		<link>http://www.prostructure.com/blog/2010/02/26/sharepoint-2010-edition-comparison/</link>
		<comments>http://www.prostructure.com/blog/2010/02/26/sharepoint-2010-edition-comparison/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 11:52:19 +0000</pubDate>
		<dc:creator>Amber Pham</dc:creator>
				<category><![CDATA[Enterprise IT]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Comparison]]></category>
		<category><![CDATA[Edition]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.prostructure.com/blog/?p=74</guid>
		<description><![CDATA[The documentation for SharePoint 2010 is gradually being filled in, but one important piece seems to be missing: the comparison of the feature sets for the Server and Foundation Editions. Some organizations are deploying their first SharePoint farm with the 2010 Beta and need this edition information to choose the version to deploy. Looking at [...]]]></description>
			<content:encoded><![CDATA[<p>The documentation for SharePoint 2010 is gradually being filled in, but one important piece seems to be missing: the comparison of the feature sets for the Server and Foundation Editions.  Some organizations are deploying their first SharePoint farm with the 2010 Beta and need this edition information to choose the version to deploy.  Looking at the <a href="http://social.msdn.microsoft.com/Forums/en/sharepoint2010general/thread/ee628fd9-c6d5-42f5-8ac6-5c8a729b3e09" target="_blank">forums</a>, it seems like I&#8217;m not the only person who has this question.</p>
<p>If you have any information about the features available in Server versus Foundation, let us know.</p>
<p>Update: 5/12/2010: The official comparison page has been posted: http://sharepoint.microsoft.com/en-us/buy/Pages/Editions-Comparison.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prostructure.com/blog/2010/02/26/sharepoint-2010-edition-comparison/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A brief history of WEP cracking</title>
		<link>http://www.prostructure.com/blog/2009/06/29/a-brief-history-of-wep-cracking/</link>
		<comments>http://www.prostructure.com/blog/2009/06/29/a-brief-history-of-wep-cracking/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 22:01:00 +0000</pubDate>
		<dc:creator>Irving Popovetsky</dc:creator>
				<category><![CDATA[Enterprise IT]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.prostructure.com/blog/?p=57</guid>
		<description><![CDATA[Year Number of 802.11 packets required to crack WEP 2001 &#8211; 2004 5-10 million  (FMS attack) 2004 &#8211; 2007 500k (unique IVs) on average for 128-bit WEP  (Korek attack) 2007 &#8211; 2008 40k (ARP packets) using the PTW attack 2008 &#8211; Present 25k (replayed packets)  using the ARP replay and/or chopchop replay, with combined PTW+Korek [...]]]></description>
			<content:encoded><![CDATA[<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="115" valign="top"><strong>Year</strong></td>
<td width="523" valign="top"><strong>Number of 802.11 packets required to crack   WEP</strong></td>
</tr>
<tr>
<td width="115" valign="top"><strong>2001 &#8211; 2004</strong></td>
<td width="523" valign="top">5-10 million  (FMS attack)</td>
</tr>
<tr>
<td width="115" valign="top"><strong>2004 &#8211; 2007</strong></td>
<td width="523" valign="top">500k (unique   IVs) on average for 128-bit WEP  (Korek   attack)</td>
</tr>
<tr>
<td width="115" valign="top"><strong>2007 &#8211; 2008</strong></td>
<td width="523" valign="top">40k (ARP packets) using the PTW attack</td>
</tr>
<tr>
<td width="115" valign="top"><strong>2008 &#8211; Present</strong></td>
<td width="523" valign="top">25k   (replayed packets)  using the ARP   replay and/or chopchop replay, with combined PTW+Korek analysis</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.prostructure.com/blog/2009/06/29/a-brief-history-of-wep-cracking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error upgrading MOSS 2007 to Service Pack 1</title>
		<link>http://www.prostructure.com/blog/2009/05/12/error-upgrading-moss-2007-to-service-pack-1/</link>
		<comments>http://www.prostructure.com/blog/2009/05/12/error-upgrading-moss-2007-to-service-pack-1/#comments</comments>
		<pubDate>Wed, 13 May 2009 00:12:08 +0000</pubDate>
		<dc:creator>Amber Pham</dc:creator>
				<category><![CDATA[Enterprise IT]]></category>

		<guid isPermaLink="false">http://www.prostructure.com/blog/?p=53</guid>
		<description><![CDATA[Troubleshooting steps and resolution to error encountered when upgrading MOSS 2007 from RTM to Service Pack 1.  Configuration of SharePoint Products and Technologies failed.  The system cannot find the path specified. (Exception from HRESULT: 0x80070003).  Pre-Upgrade [SPSite Url...] failed.]]></description>
			<content:encoded><![CDATA[<p>I needed to upgrade MOSS 2007 farm on a Windows 2003 Server from the RTM version to Service Pack 1 as a required step to prepare for a migration to Windows 2008 64-bit.  The process involved installing the WSS 3.0 SP1, ignoring the Configuration Wizard, running the MOSS 2007 SP1, then running the Configuration Wizard.  In this case, the  last step of the Configuration Wizard failed.   The Wizard screen said to look in the event log, which showed three errors similar to this:</p>
<blockquote><p>Configuration of SharePoint Products and Technologies failed.  Configuration must be performed in order for this product to operate properly.  To diagnose the problem, review the extended error information located at C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\LOGS\PSCDiagnostics_5_8_2009_19&#8230;log, fix the problem, and run this configuration wizard again.</p></blockquote>
<p>I consulted the PSCDiagnostics log, but all it did was repeat the error message shown above.  Looking in the Upgrade.log file, the last entry looked like this:</p>
<blockquote><p>[SPManager] [INFO] [5/8/2009 7:45:10 PM]: Inplace Upgrade session finishes. root object = SPFarm Name=SharePoint_Config, recursive = True. 1 errors and 0 warnings encountered.</p></blockquote>
<p>Searching back up through the file, I found one area where errors were reported:</p>
<blockquote><p>[SPManager] [ERROR] [5/8/2009 7:45:03 PM]: Pre-Upgrade [SPSite Url=http://sitename/sites/TestSite] failed. Microsoft.SharePoint.Upgrade.SPSiteWssSequence has the ContinueOnFailiure bit set. Moving on to the next object in sequence.<br />
[SPManager] [ERROR] [5/8/2009 7:45:03 PM]: The system cannot find the path specified. (Exception from HRESULT: 0&#215;80070003)</p></blockquote>
<p>The error was caused by a site that is no longer there.  This happens sometimes when a site is deleted from SharePoint, but it doesn’t get removed all the way from the configuration database.  It will often show up in Central Administration after you have deleted it.</p>
<p>Looking through the Microsoft SharePoint Service Pack 1 installation documentation, there were no fixes in the troubleshooting section that fit this scenario.  I found many articles about removing orphaned sites, but this site was not a true orphan (its parent was not missing).  If you have a true orphan, you can use the stsadm parameter databaserepair.</p>
<p>In this case, the solution was to detach the content database within SharePoint then reattach it.  When you do that, it removes the old entry from the configuration database.  This operation can normally be done by detaching and reattaching a content database within Central Administration, but since the upgrade was not complete and the farm disabled, I used stsadm.</p>
<p>stsadm –o deletecontentdb –url http://sitename –database contentdatabasename –databaseserver sqlserver\sqlinstance<br />
stsadm –o addcontentdb –url http://sitename –database contentdatabasename –databaseserver sqlserver\sqlinstance</p>
<p>*The deletecontentdb parameter does not delete the database, it only detaches the reference to it from your SharePoint farm.</p>
<p>After this, I ran psconfig at the command line:</p>
<blockquote><p>psconfig -cmd upgrade -inplace b2b -wait -force</p></blockquote>
<p>Once that completed successfully, I launched the Configuration Wizard manually from All Programs &gt; Administrative Tools &gt; SharePoint Products and Technologies Configuration Wizard to get visual confirmation that the upgrade was completed.</p>
<p>After upgrading SharePoint, always check the Upgrade.log in %COMMONPROGRAMFILES%\Microsoft Shared\Web server extensions\12\LOGS for &#8220;Finished upgrading SPFarmn Name=&lt;configuration database&gt;&#8221;, &#8220;0 errors and 0 warnings&#8221; at the end.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prostructure.com/blog/2009/05/12/error-upgrading-moss-2007-to-service-pack-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Breathe new life into a bogged-down CoyotePoint Load Balancer with DSR</title>
		<link>http://www.prostructure.com/blog/2009/04/07/breathe-new-life-into-a-bogged-down-coyotepoint-load-balancer-with-dsr/</link>
		<comments>http://www.prostructure.com/blog/2009/04/07/breathe-new-life-into-a-bogged-down-coyotepoint-load-balancer-with-dsr/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 04:07:52 +0000</pubDate>
		<dc:creator>Irving Popovetsky</dc:creator>
				<category><![CDATA[Enterprise IT]]></category>
		<category><![CDATA[Web Operations]]></category>

		<guid isPermaLink="false">http://www.prostructure.com/blog/?p=45</guid>
		<description><![CDATA[Let me start by saying this:   I am not a fan of CoyotePoint load balancers.    My support experiences so far have all been atrocious.   The system architecture is a cheap imitation of F5&#8242;s BigIP architecture from a decade ago which constantly limits me.    I&#8217;m convinced that people only buy these things because they&#8217;re cheap. I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>Let me start by saying this:   I am not a fan of CoyotePoint load balancers.    My support experiences so far have all been atrocious.   The system architecture is a cheap imitation of F5&#8242;s BigIP architecture from a decade ago which constantly limits me.    I&#8217;m convinced that people only buy these things because they&#8217;re cheap.</p>
<p>I&#8217;ve been working with a customer who&#8217;s exceeded the throughput capabilities of their Equalizer E350si load balancer.   Although the marketing materials will tell you that this unit is capable of throughput up to 700Mbps (hah!),  we were maxing out and dropping packets above 50 Mbps.</p>
<p>Rant:  You see, the problem lies in Coyote&#8217;s system architecture.  This E350si is powered by a NetBurst-architecture Pentium 4 2.8Ghz, with HyperThreading disabled.   Coyote uses a FreeBSD-4 based kernel, which was well known for it&#8217;s slow timers, slow interrupt handling, and immature device polling implementation.  In this classic system architecture, each incoming packet generates an Interrupt Request (IRQ), which must be serviced by the CPU in a time-slotted fashion.   So what we have is a load balancer which reports it&#8217;s CPU as being mostly idle,  but in reality cannot handle packets quickly enough.   THIS IS NOT HOW YOU DESIGN NETWORK EQUIPMENT, PEOPLE.   End rant.</p>
<p>Good news:   In version 8, Coyote introduced a new mode of operation called DSR, or Direct Server Return.  DSR is quite clever, really, because it get&#8217;s around Coyote&#8217;s packet handling limitation (to a big degree) by handling the incoming network packets, but allowing the web servers to respond directly to clients.   This cuts the number of TCP packets the Coyote has to process in half,  and cuts the number of Ethernet frames by much more if you consider that the return packets are much larger.</p>
<p>Here&#8217;s how it works.   In a traditional setup,  the Coyote receives a packet on its external interface (em1), makes a load balancing decision, and then forwards to the packet along to a host behind its internal interface (em0).   Most shops NAT here as well, for security and/or IP address conservation reasons.   So the Coyote must perform Layer 2 &#8211; 4 (or 7) processing of the packet as it receives it,   then make a load balancing decision,  then translate the packet (that&#8217;s the T in NAT),  then re-process the packet going out the internal interface.   Then, rinse, lather, repeat for the return packet.   Such is the life of a typical load balancer.</p>
<p>In DSR mode, you start by chopping off the Internal interface of the load balancer altogether and eliminating NAT.   This requires moving your webservers onto publicly routable IP addresses, so please make sure they are firewalled properly.   Now you have your load balancer and webservers all on the same ethernet segment.   You create a VIP (Virtual IP) on the load balancer, and then add that SAME VIP address as a loopback address to the webservers!</p>
<p>You&#8217;re probably scratching your head, wondering how this is going to work.  I know that I was.  Here&#8217;s the magical part.   Only the load balancer responds to ARP requests for the VIP.  The webservers have Apache listening on the VIP address,  but don&#8217;t respond to ARP requests at all on that address.   Each incoming packet is sent from the router to the MAC address of the load balancer,  which then makes a load balancing decision and then sends an identical copy of that packet to the MAC address of the web server.   Let me say that again.  The load balancer performs no more translation, it literally just copies the packet over to the webserver.   Since the source MAC address is unchanged,  the web server replies directly to the router and skips the load balancer entirely.</p>
<p>Sounds a bit scary, but works well.  Except for one thing.   In their brilliance,  the Coyote folks created a section in the Manual with configuration instructions for &#8220;Linux/Unix Systems&#8221;, but ACTUALLY put in instructions for BSD-like systems only.  Who runs FreeBSD anymore?   DON&#8217;T TRY THESE INSTRUCTIONS ON A LINUX SERVER UNLESS YOU WANT TO LOCK YOURSELF OUT.</p>
<p>On Linux,  the correct way to create the loopback address is by adding a &#8220;labelled&#8221; loopback interface,  but ALWAYS set the netmask of your new interface to &#8220;255.255.255.255&#8243;.   If you match the netmask of the VIP,  your webserver will stop responding to packets on it&#8217;s external interface.  Very bad.</p>
<p>So,  assume your public VIP address is 12.34.56.78  (fake, to protect the innocent),  and your webserver&#8217;s address is 12.34.56.80.   Create a loopback address like so:</p>
<blockquote>
<pre>/sbin/ifconfig lo:vip inet 12.34.56.78 netmask 255.255.255.255</pre>
</blockquote>
<p>Then, the output of &#8220;ifconfig -a&#8221; looks something like this:</p>
<blockquote>
<pre><strong>eth0</strong>      Link encap:Ethernet  HWaddr 00:40:A4:8E:B0:1A
inet addr:12.34.56.80  Bcast:12.34.56.255  Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:47131905 errors:0 dropped:0 overruns:0 frame:0
TX packets:77804088 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5111837334 (4875.0 Mb)  TX bytes:104047655003 (99227.5 Mb)
Interrupt:177

<strong>lo</strong>        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:1311164 errors:0 dropped:0 overruns:0 frame:0
TX packets:1311164 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:439975560 (419.5 Mb)  TX bytes:439975560 (419.5 Mb)

<strong><span style="color: #ff0000;">lo:vip</span></strong>    Link encap:Local Loopback
inet <strong><span style="color: #ff0000;">addr:12.34.56.78  Mask:255.255.255.255</span></strong>
UP LOOPBACK RUNNING  MTU:16436  Metric:1</pre>
</blockquote>
<p>If it all works, you should be able to confirm correct operation by using tcpdump or Wireshark/Ethereal on the webserver, and verifying that the SOURCE address is your VIP address and you&#8217;re seeing lots of 200 OK messages.</p>
<blockquote>
<pre>tshark -n -i eth0 -R http.response port 80</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.prostructure.com/blog/2009/04/07/breathe-new-life-into-a-bogged-down-coyotepoint-load-balancer-with-dsr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lesson learned:  High traffic WordPress Site Operation</title>
		<link>http://www.prostructure.com/blog/2009/04/07/lesson-learned-high-traffic-wordpress-site-operation/</link>
		<comments>http://www.prostructure.com/blog/2009/04/07/lesson-learned-high-traffic-wordpress-site-operation/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 23:19:37 +0000</pubDate>
		<dc:creator>Irving Popovetsky</dc:creator>
				<category><![CDATA[Enterprise IT]]></category>
		<category><![CDATA[Web Operations]]></category>

		<guid isPermaLink="false">http://www.prostructure.com/blog/?p=43</guid>
		<description><![CDATA[I recently had the pleasure of helping out with a WordPress blog which had gone supernova.   Within hours of being linked to from several major news sites,  the server couldn&#8217;t stay up for 10 minutes without something terrible happening. Unfortunately, WordPress isn&#8217;t setup for high performance operation out of the box.  Each page request is [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had the pleasure of helping out with a WordPress blog which had gone supernova.   Within hours of being linked to from several major news sites,  the server couldn&#8217;t stay up for 10 minutes without something terrible happening.</p>
<p>Unfortunately, WordPress isn&#8217;t setup for high performance operation out of the box.  Each page request is very CPU and database intensive.</p>
<p>Under benchmarking, we discovered that each of the customer&#8217;s HP DL385 servers could serve between 5-10 WordPress page view&#8217;s per second, depending on the page.  (For the pedantic,  I&#8217;m considering anything that hits PHP as a page view.)  And this is AFTER I had put major effort into MySQL performance tuning.    Something had to be done, 5 page views per second is just not going to cut the mustard.</p>
<p>In comes the WP-Super-Cache plugin to save the day.   WP-Super-Cache is a plugin which seems like it should be installed with every WordPress instance by default.   It writes out entire pages to static .html files,  and then instructs Apache to serve up the static .html files directly (using mod_rewrite),  therefore avoiding any CPU-gobbling calls to PHP or the database.   But WP-Super-Cache is smart,  it automatically expires cached pages when the content is updated  (by the author, or via comments).</p>
<p>As a result,  we went from 5-10 page views per second to between 500-2000 theoretical page views per second.   At this point we were hitting bandwidth bottlenecks,  which is where I like to be.   As long as webservers can serve up enough data to fill their own pipe, you have happy system administrators (and UNhappy network administrators).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prostructure.com/blog/2009/04/07/lesson-learned-high-traffic-wordpress-site-operation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VBscript code to change the local Administrator password throughout an entire domain</title>
		<link>http://www.prostructure.com/blog/2008/12/18/vbscript-code-to-change-the-local-administrator-password-throughout-an-entire-domain/</link>
		<comments>http://www.prostructure.com/blog/2008/12/18/vbscript-code-to-change-the-local-administrator-password-throughout-an-entire-domain/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 22:20:03 +0000</pubDate>
		<dc:creator>Irving Popovetsky</dc:creator>
				<category><![CDATA[Enterprise IT]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.prostructure.com/blog/?p=33</guid>
		<description><![CDATA[Irving Popovetsky explains how to change the local Administrator account on all machines in a Windows Domain to a unique, strong password using VBscript scripting.]]></description>
			<content:encoded><![CDATA[<p>Recently, I got an excellent chance to put my money where my mouth is.</p>
<p>In the past, I&#8217;ve warned Windows shops to use unique local Administrator passwords wherever possible.  I&#8217;ve even proven the dangers of using the same local Administrator password during a penetration test in 2007.   Combine this with the fact that  I rarely have anything polite to say about VBscript (it&#8217;s not a pretty language to work with), and we have the perfect karmic storm.</p>
<p>Yours truly, coding in VBscript, tasked with setting a unique, strong passwords on each one of a few hundred machines.   Here&#8217;s what I came up with:</p>
<blockquote>
<pre>' ChangeLocalAdminOnServers.vbs
' Created by Irving Popovetsky (irving@prostructure)
' 12/15/2008, ProStructure Consulting
'
' Warning:  This script will begin changing passwords as soon
' as it collects a complete list of machine names.
'
' Read and understand this code carefully before executing,
' and always remember to fill in your own variables where appropriate.
' We assume no liability for damages that may be caused by running
' this code in your production environment!!

On Error Resume Next

Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")

' ***CHANGEME*** Change the output file to a location you trust, like an
' Encrypted folder or USB stick that can be stored away
' In the future, this could be improved to output directly to PGP or equivalent.
Set MyFile = fso.CreateTextFile("c:\Temp\Changedservers.txt", True)

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

' ***CHANGEME*** Fill in your own Domain name here
objCommand.CommandText = _
    "SELECT Name FROM 'LDAP://dc=DOMAIN,dc=INTERNAL' WHERE objectCategory='computer'"
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

Do Until objRecordSet.EOF
    strComputer = objRecordSet.Fields("Name").Value

	' ***CHANGEME*** Skip the Domain Controllers  - fill in your own values here
	if Instr(1,strComputer, "DOMAINCONTROLLER1") Then objRecordSet.MoveNext
	if Instr(1,strComputer, "DOMAINCONTROLLER2") Then objRecordSet.MoveNext
	if Instr(1,strComputer, "DOMAINCONTROLLER3") Then objRecordSet.MoveNext

	' Irving - Random password
	Dim intUpperLimit, intLowerLimit, strPassword
	strPassword = ""
	intUpperLimit = 126
	intLowerLimit = 33

	For i = 1 to 12
	    Randomize
	    intASCIIValue = Int(((intUpperLimit - intLowerLimit + 1) * Rnd) _
	        + intLowerLimit)
	    strPassword = strPassword &amp; Chr(intASCIIValue)
	Next

	'  Perform the Action.  Write out the computername/password then execute
	MyFile.WriteLine(strComputer &amp; "   " &amp; strPassword)
	Set objUser = GetObject("WinNT://" &amp; strComputer &amp; "/Administrator")
	objUser.SetPassword strPassword

    objRecordSet.MoveNext
Loop

MyFile.Close</pre>
</blockquote>
<p>Credits to <a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/jul07/hey0703.mspx" target="_blank">The Scripting Guy&#8217;s article on scripting the change of the local administrator password</a>. Very funny article,  I&#8217;m a big fan of the Scripting Guy.</p>
<p>Now, there are certainly some improvements that can be made, and WILL be made if I ever have to use this thing again.   First off, the ability to define the output location and LDAP search path.   Second, automatically determining if a server is a domain controller and skipping it.  You DEFINITELY DO NOT want this script hitting a Domain Controller, because it will change the Domain&#8217;s Administrator account, and that can be a bad thing.  Trust me, I already learned that lesson, at least I had the password in my output file.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prostructure.com/blog/2008/12/18/vbscript-code-to-change-the-local-administrator-password-throughout-an-entire-domain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hard drives:  Magical, complex, and faulty.</title>
		<link>http://www.prostructure.com/blog/2008/07/07/hard-drives-magical-complex-and-faulty/</link>
		<comments>http://www.prostructure.com/blog/2008/07/07/hard-drives-magical-complex-and-faulty/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 20:42:59 +0000</pubDate>
		<dc:creator>Irving Popovetsky</dc:creator>
				<category><![CDATA[Enterprise IT]]></category>
		<category><![CDATA[raid]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://www.prostructure.com/blog/?p=9</guid>
		<description><![CDATA[Research from Netapp, Google and CMU has shown that accepted ideas about hard drives and enterprise storage are wrong. ]]></description>
			<content:encoded><![CDATA[<p>As a quick refresher before I make some recommendations to a customer,  I got to revisit the discussion of hard drives and how they like to fail.</p>
<p>Three articles on the StorageMojo blog are brilliant and worth a read or a revisit:</p>
<ul>
<li><a title="NetApp Weighs In On Disks" rel="bookmark" href="http://storagemojo.com/2007/02/26/netapp-weighs-in-on-disks/" target="_blank">NetApp Weighs In On Disks</a> &#8211; Val Bercovici of Netapp weighs in on disk failure surveys from Google and CMU&#8217;s Parallel Data lab.  Beware some marketing spin mixed in with some real gems of knowledge.</li>
<li><a title="Google’s Disk Failure Experience" rel="bookmark" href="http://storagemojo.com/2007/02/19/googles-disk-failure-experience/" target="_blank">Google’s Disk Failure Experience</a>:  Google&#8217;s analysis of failure rates among 100,000 drives.  It&#8217;s worth noting that Google uses cheap SATA drives almost exclusively in the cloud.</li>
<li><a title="Everything You Know About Disks Is Wrong" rel="bookmark" href="http://storagemojo.com/2007/02/20/everything-you-know-about-disks-is-wrong/" target="_blank">Everything You Know About Disks Is Wrong</a>: The aforementioned CMU study, which has a nice comparison between cheapo SATA disks and fancy FC disks.</li>
</ul>
<p>There are some critically important takeways in these articles and the surrounding commentary that we must never forget when safeguarding our data.   Most imporant points:</p>
<ul>
<li><strong>MTBF is a nearly irrelevant number.</strong> Storage experts are contending that Mean Time Beteween Failures is actually much closer between &#8220;consumer&#8221; SATA drives and &#8220;enterprise&#8221; FC drives than the marketing people want you to believe.</li>
<li><strong>There is a huge amount of magic and complexity happening inside of every hard drive: </strong>Really, almost all of it is masked from users.   Hard drive controllers and their respective firmware has gotten insanely complex to keep up the increasing number of failure and error scenarios as disks get more dense.   The difference between two disk firmware revisions or code branches can make a considerable impact on drive reliability.</li>
<li><strong>The REAL difference between the low and high-end is RAID controller and drive firmware smarts:</strong> Why do disks and RAID controllers form storage vendors cost so much more?   Because those storage vendors are on the hook for a complete product, and put engineering time into changing the disk behaviour by customizing drive firmware and pre-qualifying drives.   They also know that SMART is a sham, predicting only a small fraction of disk failures.  The secret sauce is performing advanced failure profiling on the RAID controller, and coordinating it with fully understood and tuned drive firmware.  This is the true difference between your cheapo Promise variety RAID setups and those from Netapp, Hitachi, EMC and HP.</li>
<li><strong>Drive failure rates do go up with age: </strong>Heavily used drives are either going to fail in the first three months,  or with steadily increasing risk beyond the 3 year mark.    We&#8217;ve seen this in the field as well,  even early $1000/drive 300GB FC disks had a 10% failure rate in the first 3 months after you started working them hard.   Drives older than 3 years have typically been spinning, without stopping, for that entire time period.   Bad Things are known to happen when you spin them down, let them cool, and then try to spin them up again.</li>
<li><strong>Background media scanning is the best way to detect drive failures: </strong> Does your RAID controller perform background media scanning or at least a full array consistency check on a regular basis?  Great!   Because THIS is the real way to predict disk failure,  by monitoring and trending subtle disk failures (bad sectors, etc),  rather than waiting for SMART to (not) predict a major mechanical failure.   As it was said above,  SMART is mostly useless.   Hopefully you&#8217;re not feeling quite so good about that &#8220;S.M.A.R.T. Status OK&#8221; message anymore.</li>
<li><strong>RAID 5 is more harmful than you think:</strong> Many numbers are starting to come out about how often double failures are happening in RAID5 arrays.  It&#8217;s quite disturbing, but you run a HUGE risk of data loss during that high-activity array rebuild after your first disk has failed.   And, as pointed out, too many people rely on RAID5 as a backup solution.  So let&#8217;s say it again RAID5 is NOT a backup solution, and never will be.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.prostructure.com/blog/2008/07/07/hard-drives-magical-complex-and-faulty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->