<?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>xpresslearn.com &#187; Security</title>
	<atom:link href="http://www.xpresslearn.com/category/security/feed" rel="self" type="application/rss+xml" />
	<link>http://www.xpresslearn.com</link>
	<description>Solutions to your Networking and Security questions</description>
	<lastBuildDate>Tue, 13 Dec 2011 18:16:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Two Factor Authentication for Linux Console and ssh Logins</title>
		<link>http://www.xpresslearn.com/security/two-factor-authentication-for-linux-console-and-ssh-logins</link>
		<comments>http://www.xpresslearn.com/security/two-factor-authentication-for-linux-console-and-ssh-logins#comments</comments>
		<pubDate>Mon, 12 Dec 2011 22:20:33 +0000</pubDate>
		<dc:creator>Scott Pilkinton</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Radius]]></category>
		<category><![CDATA[RSA]]></category>
		<category><![CDATA[token]]></category>
		<category><![CDATA[Two-Factor Auth]]></category>

		<guid isPermaLink="false">http://www.xpresslearn.com/?p=933</guid>
		<description><![CDATA[This article will explain how to authenticate users on a Linux machine using a RADIUS server for central authentication.  In this particular example, RADIUS is being used to authenticate users in RSA Authentication Manager for two-factor authentication, specifically local for ssh and console logins.]]></description>
			<content:encoded><![CDATA[<p>This article will describe how to setup two-factor authentication for a Debian based Linux machine.  This solution will work for console and remote (ssh) logins.  When changing a Linux host to using two-factor authentication, there is actually a couple of options.  I&#8217;ll briefly explain the two options and why one was chosen over the other in this particular example.  Before getting to that part, a brief mention of the type of two-factor authentication server that is being used.</p>
<p>RSA Authentication Manager provides an authentication mechanism consisting of a &#8220;token&#8221; &#8211; either hardware (e.g. a Keyfob) or software (application that provides same functionally as a keyfob).  A hardware or software token is assigned to an individual, which generates an authentication code at fixed intervals (usually 60 seconds) using a built-in clock and the tokens factory-encoded random key (known as the &#8220;seed&#8221;). The seed is different for each token, and is loaded into the corresponding RSA SecurID server (RSA Authentication Manager, formerly ACE/Server) as the tokens are purchased.</p>
<p>In this example, I are using RSA Authentication Manager 6.1, which is running on a purpose built appliance that uses Windows 2003 Server with the RSA server software installed.  This particular solution includes Funk Software&#8217;s Steel Belted Radius, which provides a radius authentication mechanism into RSA.  At the time of this writing, this particular appliance and software version is approaching end of life and has since been replaced with Authentication Manager 7.1.  In the appliance version of 7.1 (known as Authentication Manger 3.0), the operating system has moved to Linux with Authentication Manager 7.1 loaded on top of it.  Version 7.1/3.0 also includes a radius server that can be used for radius clients needing to utilize two-factor authentication.</p>
<p><span id="more-933"></span></p>
<p><center>
<div><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div>
<p></center></p>
<p>Now, onto the client portion of software used to interface with the RSA server.  As previously mentioned, there are two options, with the first being to use the RSA provided authentication agent for Unix/Linux.  The agent is actually a module that hooks into PAM, which is the central authentication standard used in most modern Unix/Linux systems today.  This option provides the maximimum functionality and interfaces directly with the RSA protocol (which means the RADIUS server is not required).</p>
<p>The second option is to load a RADIUS module into PAM (pam_radius_auth), which would then communicate to the RSA server via it&#8217;s built in RADIUS server.  Why would you want to use this option over the first option presented?  The RSA provided client is only supported on  a couple of Linux platforms, namely Red Hat and SuSE, which are both RPM based.  So if you are using any other Linux distribution (Debian based, etc.), there is not an RSA provided option with this client software.</p>
<p>Most Linux software repositories will contain a PAM radius module, which prevents having to download source code and compiling programs.  I&#8217;m specifically working on a Debian based system, which includes the module libpam_radius_auth in it&#8217;s repository.  The following contains instructions for configuring the system:</p>
<p>First, install the module from the distributions repository:</p>
<pre>root@localhost:~# apt-get install libpam-radius-auth
Running /usr/bin/apt-get install libpam-radius-auth
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  radius-server
The following NEW packages will be installed:
  libpam-radius-auth
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 24.7kB of archives.
After this operation, 127kB of additional disk space will be used.
Get:1 http://ftp.us.debian.org lenny/main libpam-radius-auth 1.3.16-4.4 [24.7kB]
Fetched 24.7kB in 0s (58.4kB/s)
Selecting previously deselected package libpam-radius-auth.
(Reading database ... 36010 files and directories currently installed.)
Unpacking libpam-radius-auth (from .../libpam-radius-auth_1.3.16-4.4_amd64.deb) ...
Setting up libpam-radius-auth (1.3.16-4.4) ...</pre>
<p>Now that the module is installed, it&#8217;s time to edit configuration files:</p>
<pre>root@localhost:~# vi /etc/pam_radius_auth.conf</pre>
<p>My default configuration file had two invalid entries defined to show the format.  One of two entries in my configuration file was for 127.0.0.1 with a comment below it that read &#8220;having localhost in your radius configuration is a Good Thing&#8221;.  I don&#8217;t know what that is supposed to mean, but don&#8217;t leave it in the configuration as we have no Radius server running on the local machine.</p>
<p>After removing the existing (sample) entries and replacing with valid server entries, which contained server[:port], shared_secret, and timeout (separated by tab) &#8211; save and close the file.  A particular detail to note is that initially I set the timeout value to the displayed default of 3 (seconds).  However, I experienced authentication failures until I changed that value to 5 (seconds) &#8211; after noticing timeout messages in /var/log/auth.log.</p>
<p>Next, we need to modify a PAM configuration file in order to specify the use of the RADIUS module when authentication occurs.  Note: There are several services that make use of the PAM system for authentication.  Therefore, by doing what I am about to explain could cause negative impact on an application that uses PAM to authenticate users.  Further research should be performed to determine which configuration file the following commands should be placed in, based on what you want to secure.</p>
<p>In this example, there are no applications running that need auth services provided by PAM (such as an FTP server, HTTP server, SAMBA, etc).  The goal is to define the use of a global policy that uses the RADIUS module for central authentication.  If you wanted to only secure a particular service (like ssh logins for administrator shell access via sshd), a different file other than the following can be modified so to not disrupt any other PAM using applications installed on the machine.</p>
<p><center>
<div><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div>
<p></center></p>
<p>Edit the /etc/pam.d/common-auth configuration file:</p>
<pre>
root@localhost:/etc/pam.d# vi common-auth
</pre>
<p>First, find the following line in the configuration:</p>
<pre>
auth	required	pam_unix.so nullok_secure
</pre>
<p>Insert a new line BEFORE/ABOVE the previous line and paste the following line into the file.</p>
<pre>
auth	sufficient	pam_radius_auth.so
</pre>
<p>Save and exit the file.  The previous addition to the common-auth file tells PAM to use the RADIUS module for authentication first (since it is listed first in the configuration).  By specifying &#8216;sufficient&#8217; in our entry, PAM determines that a successful auth using this module is satisfactory, therefore no other modules defined in the configuration file need to be processed.  However, if there is a failure from this module (user didn&#8217;t exist on RADIUS server), then continue processing entries in this configuration file.  Note: By configuring this way, any locally defined users on the system will still authenticate successfully.  Therefore, it is advised to only have local &#8216;emergency accounts&#8217; defined, in case the machine completely looses communications with all configured RADIUS servers &#8211; you would still be able to log in with a local user.  If you adopt this policy, obviously the people who know the credentials to the locally defined account(s) should be minimal &#8211; in order to force the use of individual (RADIUS defined) accounts.</p>
<p>Next, edit the /etc/pam.d/common-account file</p>
<pre>
root@localhost:/etc/pam.d# vi common-account
</pre>
<p>Find the line:</p>
<pre>
account	required	pam_unix.so
</pre>
<p>Insert the following BEFORE/ABOVE the previous line:</p>
<pre>
account	required	pam_radius_auth.so
</pre>
<p>Save and exit the file.  The previous addition to the common-account file is to tell PAM to use the RADIUS module for any authorization requirement (like permitting access to a service based on time of day, etc.), prior to checking the local database. By specifying &#8216;required&#8217; in our entry, PAM determines that the success of the module is required for the module-type facility (in this case authorization is the module-type) to succeed. </p>
<p>Next edit the /etc/pam.d/common-session configuration file:</p>
<pre>
root@localhost:/etc/pam.d# vi common-session
</pre>
<p>Find the line:</p>
<pre>
session	required	pam_unix.so
</pre>
<p>Insert the following lines BEFORE/ABOVE the previous line:</p>
<pre>
session	required	pam_radius_auth.so
session	required	pam_mkhomedir.so	skel=/etc/skel/	umask=0022
</pre>
<p>Save and exit the file.  The previous addition to the common-session file is to define tasks to be performed at the start and end of a user control of a service. By specifying &#8216;required&#8217; in our entry, PAM determines that the success of the module is required for the module-type facility (in this case services is the module-type) to succeed.</p>
<p>As you can see, we added a second module (pam_mkhomedir.so) to the common-session configuration file.  This is required in order to have a home directory available for a RADIUS authenticated user.  The module will run after a successful authentication and create the user home directory in /etc/skel with the appropriate permissions.</p>
<p>That will complete the configuration setup.  There is one final step left that has to be performed for every user that will login to the system via RADIUS.  Because RADIUS doesn&#8217;t provide a directory service, we have to have UID and GID information pre-populated on our system.  This is accomplished by creating the username and groupname on the local system, which will assign the necessary unique user ID and group ID values (numbers).</p>
<p>For example, a user that needs to authenticate via radius using a login id of johnh (that belongs to an associated group called johnh) needs to have the following performed on the local system:</p>
<pre>
useradd johnh
</pre>
<p>That will do it, the user will now have an entry that is created in /etc/passwd and /etc/group with an automatically created (unique) ID number.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xpresslearn.com/security/two-factor-authentication-for-linux-console-and-ssh-logins/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DIY Checkpoint Firewall Log Analysis</title>
		<link>http://www.xpresslearn.com/security/diy-checkpoint-firewall-log-analysis</link>
		<comments>http://www.xpresslearn.com/security/diy-checkpoint-firewall-log-analysis#comments</comments>
		<pubDate>Fri, 30 Sep 2011 21:29:47 +0000</pubDate>
		<dc:creator>Scott Pilkinton</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.xpresslearn.com/?p=861</guid>
		<description><![CDATA[An example of putting together a solution using simple tools for analyzing log data from a Checkpoint firewall.  In this example, we take a 5Gb logfile and import only data for a single host into a sqlite database.  From there, we run queries to determine what communication goes through the firewall either sourced or destined to this host.]]></description>
			<content:encoded><![CDATA[<p>In the world of firewall administration, one very common problem is a host behind a firewall has more access than what was intended.  This occurs mainly due to &#8216;loosely defined&#8217; rules that happen to &#8216;catch&#8217; unintended traffic and then inadvertently allows it to pass.  I recently was given a task of reducing access from a set of hosts behind a CheckPoint firewall which had a 1000 rule policy installed, with logging turned on for each one (including the cleanup rule).  My point of describing the environment is that it can quickly become overwhelming to fire up Tracker and begin to piece access information together, especially across multiple days.  In order to get started, the first item of business was to find all the rules this group of hosts were using, which had to be known before implementing the required &#8216;bare bones&#8217; access.</p>
<p>Before I go any further, it must be stated that commercial packages exist that can do this type of analysis for you.  These software programs usually import CheckPoint logs into a larger data-source and then run various reports against it.  While those packages are extremely valuable to the firewall administrator, often times it is cost prohibitive to the company they work for.  It will be my attempt to share a Do It Yourself, bare bones, just get it done, alternative approach to buying these costly software packages.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p><span id="more-861"></span></p>
<p>As far as prerequisites, not much is needed: I&#8217;ll be using a Linux workstation for the utilities, such as cat,grep, and others.  The log data will be imported into a SQLite database for analysis.  Everything I have mentioned thus far is available on a Windows workstation, but will require a little bit of work to find/install it.  My point here is: If you have not taken the plunge to set up a Linux &#8216;utility&#8217; workstation yet &#8211; now would be a great time to knock that out.  Anyway, I will show all my examples and reference the procedure as if it is being performed from a Linux machine.  However, I think it will easily be adaptable to the Windows only administrator.  If not, I will do my best to clarify points as questions are asked.</p>
<p>First, we must get the logs in the format we can work with.  This will require exporting the current CheckPoint log file type to a delimited, plain text type.  The utility required for this will be located in the Firewall1 program directory on the SmartCenter management station.</p>
<p>From a command line on the SmartCenter machine, we want to change to the firewall log directory:</p>
<pre>cd \fw1_install_dir\RXX\fw1\log</pre>
<p>where fw1_install_dir = SmartCenter installation directory and XX = the version of SmartCenter installed (i.e. R75).</p>
<p>running the &#8216;dir&#8217; command in this directory will give you the name of the available logfiles for export.  The file names will follow the format of YYYY-MM-DD_HHMMSS_XX.log, select the file for export and run the following:</p>
<pre>fwm logexport -n -p -m raw -i [YYYY-MM-DD_HHMMSS_XX.log] -o [YYYY-MM-DD_HHMMSS_XX.txt]</pre>
<p>The switches are explained below:</p>
<pre>Usage:
fwm logexport [-d delimiter |-s] [-i filename] [-o filename] [-f|-t] [-x start_p
os] [-y end_pos] [-z] [-n] [-p] [-a] [-u unification_scheme_file] [-m (initial|s
emi|raw)]
Where:
-d  - Set the output delimiter. Default is ';'.
-s  - Set the delimiter to be ASCII character #255.
-i  - Input log file name. Default is the active log file, fw.log.
-o  - Output file name. Default is printing to the screen.
-f  - Only in case of active log file - Upon reaching end of file, wait for new
records and export them as well.
-t  - Same as -f flag, only start at end of file.
-x  - Start exporting at the specified position.
-y  - End exporting at the specified position.
-z  - Continue exporting the next records, in case of an error. Default is to stop exporting.
-n  - No IP resolving. Default is to resolve all IPs.
-p  - No port resolving. Default is to resolve all ports.
-a  - Export account records only. Default is export all records.
-u  - Unification scheme file name. Default is log_unification_scheme.C.
-m  - Unification mode: initial-order, semi-unified, or raw. Default is 'initial'.</pre>
<p>The switches used in the previous example should be self-explanatory after looking them up using the syntax help above.</p>
<p>Here is the command I ran in my environment</p>
<pre>C:\Program Files\CheckPoint\R71\fw1\log&gt;fwm logexport -n -p -m raw -i "2011-09-28_235900_98.log"
 -o "d:\2011-09-28_235900_98.txt"
Starting... There are 20492936 log records in the file
File logexport.ini was opened successfully
Processed 20492936 out of 20492936 records (99%)</pre>
<p>Once I did this in my environment for one log file, which contained access information for a 24 hour period, the result was a 5.2G text file.  This would obviously be impossible to open with any editor, which is where our Unix utilities come into play.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p><!--more--></p>
<p>At this point, I only want to load the necessary data into the db.  This keeps the database small and makes queries much more responsive.  In order to extract a subset of data from the log output, we will use awk and grep to put the desired results into a separate file.  In this example, I want traffic that was either sourced or destined to 10.16.2.20.</p>
<pre># awk '{q=split($0,a,";");if (NR==1){for (v=1;v&lt;=q;v++) c[a[v]]=v} printf("%s;%s;%s;%s;%s;
%s;%s;%s;%s;%s\n",a[c["date"]],a[c["time"]],a[c["action"]],a[c["rule_uid"]],a[c["rule_name"]],
a[c["src"]],a[c["s_port"]],a[c["dst"]],a[c["service"]],a[c["xlatesrc"]])}' 2011-09-28_235900
_98.txt | grep '\&lt;10.16.2.20\&gt;' &gt; windowsdc01.txt</pre>
<p>The previous command uses &#8216;awk&#8217; to process the file &#8217;2011-09-28_235900_98.txt&#8217; and only print the log fields we are interested in. Awk is being used because for some reason, Checkpoint does not export log files the same way twice.  For example a fwm export one day may contain 51 columns, the next day it might contain only 40.  Obviously this would play havoc on importing the same fields each time into our database.  By extracting just the columns we need, this ensures the same format each time.  This command looks very complex, the only thing you really want to consider is if additional fields are wanted in the output.  If this is the case, just make sure the additional fields are specified in order within the script.  For example, let say you want to add an additional field (i/f_name) to the output.  If you look at the first line of the original exported file, which are the column headers, you will see the &#8220;i/f_name&#8221; column is between &#8220;action&#8221; and &#8220;rule_uid&#8221;.  So hear is what you would add to the existing script <b>(in bold)</b></p>
<p>a[c["action"]],<b>a[c["i/f_name"]],</b>a[c["rule_uid"]],</p>
<p>You will also need to add an additional %s; after the printf statement for each additional field you add</p>
<p>Moving on, note after the grep command the \&lt; and the \&gt; characters with the ip address in between.  What this does it tell grep to only match this character string if it&#8217;s the beginning or end of the word.  If the \&lt; characters were missing from above, then we would also match other hosts like 110.16.2.20 or 210.16.2.20.  Likewise, if the \&gt; were missing off the end, then we would match on 10.16.2.201, 10.16.2.202, and so on.  Finally, the greater than sign followed by a file name, will output the results to a file instead of to the default location of the screen.</p>
<p>Now, I have a separate file that contains only the data I care about at the moment and it is 28Mb vs. the 5Gb source file we started with.  The next thing to do is load it into a sqlite database.  Before we can do that, we have to create the database with a table containing the proper columns to accept the text file import.  We start by invoking sqlite and passing it a variable that will be the name of a new database, which in this example is called data.db.  Once sqlite is invoked, run the SQL script shown below, which is used to create the table.  Obviously this sql statement would need to be modified if you added additional fields over what is shown in the previous example.</p>
<pre># sqlite3 data.db
SQLite version 3.7.5
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite&gt;CREATE TABLE tbl_fwlogs(
f_date varchar(10),
f_time varchar(10),
f_action varchar(10),
f_rule_uid varchar(100),
f_rule_name varchar(15),
f_src varchar(10),
f_srcport varchar(10),
f_dst varchar(15),
f_service varchar(10),
f_xlatesrc varchar(10));
sqlite&gt;</pre>
<p>Define the separator used in the import file</p>
<pre>sqlite&gt; .separator ";"</pre>
<p>Finally, import the text file into the database</p>
<pre>sqlite&gt; .import file.txt tbl_fwlogs</pre>
<p>Now that you have data to query, here is a sample that displays what rules are being used in the rulebase for this particular host.</p>
<pre>sqlite&gt; select DISTINCT(f_rule_uid),f_rule_name from tbl_fwlogs;</pre>
<pre>{3C9A2260-8E75-4488-82C3-A3F279BB72B6};Srv to Srv access
{13385ECB-2S6F-4657-CC20-4DA76F217141};Windows Domain Resources
{3A5A0D9E-1D32-41BD-9795-829ED5CFE366};Time Requests
{5D2726D6-738A-43BA-8B5B-63FA0A7EBF78};Monitoring Servers
{A696790B-2605-46B2-BDA3-8A64A5B98C1A};DNS
{DDDCF882-8121-4E27-8A28-EA17EC5BC47E};Internal ICMP
sqlite&gt;</pre>
<p>In this example we see there are 6 rules in use for this host.  From here additional queries would determine src/dest addresses and protocols used so that we could take that info and build a stricter rule set for this host.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xpresslearn.com/security/diy-checkpoint-firewall-log-analysis/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Security Guides available from the DoD</title>
		<link>http://www.xpresslearn.com/security/security-guides-available-from-the-dod</link>
		<comments>http://www.xpresslearn.com/security/security-guides-available-from-the-dod#comments</comments>
		<pubDate>Wed, 12 Aug 2009 03:37:25 +0000</pubDate>
		<dc:creator>Scott Pilkinton</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Security Technical Implementation Guides]]></category>
		<category><![CDATA[STIG]]></category>

		<guid isPermaLink="false">http://www.xpresslearn.com/?p=246</guid>
		<description><![CDATA[Using Department of Defense security material that is freely available to anyone in order to secure your networks and host platforms]]></description>
			<content:encoded><![CDATA[<p>In corporate environments, I.T. professionals are constantly trying to adhere to the latest guidelines that apply to the line of business they are a part of.  Most organizations are guided by one or more of the following:  HIPPA (Healthcare), PCI (Credit Card Industry), and SOX among others.  These guidelines definitely overlap with each other in areas.  If your privileged enough to have to satisfy more than one of these governing bodies, many times an issue addressed in one will also address the same issue in another.  The overlap exists largely because all of these guidelines are based on &#8216;best practices&#8217;.  When you have a list of these best practices available to audit against, it allows you to score yourself before the formal audits happen that are required by the various governing bodies.  It is also wise to be aware of the best practices before implementing a new system, in order to prevent having to go back and revisit after the implementation.</p>
<p>The good news is there are resources available to anyone and are provided by Defense Information Systems Agency (DISA) which is a government agency that is part of the Department of Defense (DoD). These guides are separated into two different types: One set is called Security Technical Informational Guides (STIG) and the other is called Security Checklists.  These guides are developed to provide guidance for people who build and manage DoD networks.  They are also used in audits performed within Department of Defense networks.</p>
<p>None of the DoD offered materials has anything to do with HIPPA, PCI, SOX, etc. on the surface, but the thing they do have in common is they are focused on security best practices.  In my experience dealing with HIPPA, PCI, SOX, and DoD networks, using these guides as a reference to secure a network or platform will cover 90+% of anything that would come up in a HIPPA, PCI, or SOX audit.</p>
<p><span id="more-246"></span></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p>These guides are available publicly to anyone and are considered unclassified material in their currently offered form.</p>
<p>Use the following link to browse the security checklists, find one that addresses your area of interest and download.  All unpacked files are in .pdf format.</p>
<p><a href="http://iase.disa.mil/stigs/checklist/index.html">http://iase.disa.mil/stigs/checklist/index.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xpresslearn.com/security/security-guides-available-from-the-dod/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Secure IOS</title>
		<link>http://www.xpresslearn.com/security/secure-ios</link>
		<comments>http://www.xpresslearn.com/security/secure-ios#comments</comments>
		<pubDate>Thu, 29 May 2008 04:18:31 +0000</pubDate>
		<dc:creator>Scott Pilkinton</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[harden IOS]]></category>
		<category><![CDATA[secure IOS]]></category>

		<guid isPermaLink="false">http://www.xpresslearn.com/?p=116</guid>
		<description><![CDATA[This article describes how to secure a Cisco device before putting into production.]]></description>
			<content:encoded><![CDATA[<p>In general, unsecure platforms are largely due to configuration mistakes.  Leaving default configuration items can also be considered mistakes if they leave the platform insecure.  Cisco routers do a pretty good job  with the defaults, such as not allowing you to telnet to a router until passwords are set or not being allowed to enter enable mode from a telnet session with missing enable passwords.  However, configuring these basic items are no where near where you should leave the configuration.</p>
<p>Cisco even provides a utility in most newer versions of the IOS to help secure the platform.  This feature is called auto secure and was introduced in version 12.3(1).  The auto secure utility goes a long way in helping the administrator configure a secure IOS device.  This article will contain many of the things the auto secure utility will implement and more, along with hopefully explaining what each command is accomplishing.</p>
<p><span id="more-116"></span></p>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p>The configuration items are grouped into categories, to better separate the purpose of each.</p>
<h4>Securing Access to the Router</h4>
<pre>!
! Do not leave any unencrypted passwords in the IOS configuration
!
<strong>service password-encryption</strong>
!
! Configure a secret password which takes the place on the enable pw
! Remove the enable pw completely after secret is configured
!
<strong>enable secret</strong> ^Pr3tty53cr3tpa55w0rd!
<strong>no enable password</strong>
!
! If no external authentication server is being used then configure
! local username/passwords in the configuration.  Don't just use
! vty or secret password for telnet access.  In this example,
! configure a user called admin with level 15 access and associated secret
! password which is stored in the configuration as a type 5, which currently
! can't be reversed (as apposed to type 7 passwords that can be un-encrypted)
!
<strong>user</strong> admin <strong>privilege</strong> 15 <strong>secret</strong> ^n0th3r53cr3tpa55w0rd!
!
! Enable AAA on the device which allows aaa commands to be configured
!
<strong>aaa new-model</strong>
!
! Create an authentication list named Admins that authenticates against
! locally configured users
!
<strong>aaa authentication login</strong> Admins <strong>local</strong>
!
! Tell the router to consider the priviledge level configured for each
! locally defined user
!
<strong>aaa authorization exec default local</strong>
!
! For console logins, use the authentication list called Admins
!
<strong>line con 0</strong>
<strong>login authentication</strong> Admins
!
! For telnet/ssh logins, use the authentication list called Admins
!
<strong>line vty</strong> 0 4
<strong>login authentication</strong> Admins</pre>
<h4>Disable unnecessary services on the device</h4>
<pre>!
! Disable the bootp server
!<strong>
no ip bootp server
</strong>!
! Disable the http server
!<strong>
</strong><strong>no ip http server
</strong>!
! Disable the finger server
!
<strong>no ip finger
no service finger
</strong>!
! <span class="content">Disable Packet Assembler/Disassembler</span> for X25
!<strong>
</strong><strong>no service pad
</strong>!
! Disable echo discard daytime chargen
!<strong>
no service udp-small-servers
no service tcp-small-servers
</strong></pre>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<h4>Other</h4>
<pre>!
! Use the real date and time on all logging and debugging output
! as apposed to the device's uptime
!<strong>
</strong><strong>service timestamps debug datetime msec localtime show-timezone
service timestamps log datetime msec localtime show-timezone
</strong>!
! Set logging to the internal buffer and make it large enough to hold
! log entries without being lost due to wrapping
! because of the small default buffer size
!
<strong>logging buffered</strong> 16384
!
! Set local timezone and DST if observed
!
<strong>clock timezone</strong> CST -6
<strong>clock summer-time</strong> CDT recurring
!
! Just about all company legal departments want this used
! This will display when the device is accessed (before authenticating)
!
<strong>banner login</strong> ^C
Authorized Access only
  This system is the property of Xpresslearn.
  UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITED.
  You must have explicit permission to access this
  device. All activities performed on this device
  are logged. Any violations of access policy will result
  in disciplinary action.^C
!
! Don't try to obtain a configuration via tftp at device boot
!
!
<strong>no service config</strong></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.xpresslearn.com/security/secure-ios/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dynamips in an unsecured network</title>
		<link>http://www.xpresslearn.com/security/dynamips-in-an-unsecured-network</link>
		<comments>http://www.xpresslearn.com/security/dynamips-in-an-unsecured-network#comments</comments>
		<pubDate>Sat, 16 Feb 2008 04:49:16 +0000</pubDate>
		<dc:creator>Scott Pilkinton</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Dynagen]]></category>
		<category><![CDATA[Dynamips real network]]></category>

		<guid isPermaLink="false">http://www.xpresslearn.com/cisco/security/dynamips-in-an-unsecured-network</guid>
		<description><![CDATA[Dynamips is a very innovative and widely successful project geared toward the network professional for use as a highly effective training platform.  This hardware emulation software should also have you taking another look at the security on your network.]]></description>
			<content:encoded><![CDATA[<p>Do you have things in the networks your responsible for that needs to be made more secure? The answer to that question is obvious, but tends to go without much priority. You see, no matter what it is, most of the time fixing these items introduces change. The old saying comes in to play here: &#8220;If it isn&#8217;t broke, don&#8217;t fix it!&#8221;. Many times the question comes back from your boss or some change approval committee &#8211; Is this change really necessary and what will I gain from it? Many times an answer stating &#8216;a more secure network&#8217;, is not enough to get approval for doing the needed work.</p>
<p>Let&#8217;s look at this another way: What kind of damage could someone do to your network if all they were armed with was a standard pc and access to the internet. The answer is obvious, however let&#8217;s get more specific. What if your network contained an unsecured switch port, a routing protocol running with no type of authentication, or what about a gateway redundancy protocol (HSRP, VRRP, etc.) that was unsecured? How about a lan without a proper spanning tree configuration? Well, the answer should still be obvious, there are a gazillion sites with utilities that run on a PC with the capability of interacting/disrupting a network with the previously stated issues. With all of that said, let&#8217;s ask ourselves a different question:</p>
<p><span id="more-75"></span></p>
<p align="center"><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p>How much easier (than the previous scenarios) would it be to damage my network if someone walked into the office with a Cisco router under their arm and was able to sit down and plug it into the network? Again, without wanting to sound like a broken record, the answer should be jumping out of the screen at you &#8211; but maybe at a little more alarming rate than before. How about a little demonstration? I am about to show you in less than 10 easy steps how that Cisco router can be carried through the door and plugged into the network. Before you ask, no magic will be taught here, that will be left to the experts. Let&#8217;s get started:</p>
<ol>
<li>Download Dynagen from <a href="http://dynagen.org" target="_blank">http://dynagen.org/</a> and install</li>
<li>From the start button (Windows) , In the newly created Dynagen folder, click on Network Device List</li>
<li>From the generated list, Pick out the installed network adapter that connects your computer to the Local Area Network. Once found, copy the appropriate device string to the clipboard, beginning with NIO_ and select all the way out to the end of the line before copying.</li>
<li>Download <a href="http://www.xpresslearn.com/wp-content/uploads/2008/02/dynagensingle3640nm16.zip" target="_blank" title="Dynagen configuration file using a single 3640 Route4r and NM-16">this file</a> and unzip it into the \Program Files\Dynagen\sample_labs folder. Open the sw1.net file in a text editor and do a search for the string NIO. Once found, select and replace the entire existing string in the file beginning with NIO by pasting your computers specific string from the clipboard. Save this file and exit the editor.</li>
<li>Download from Cisco&#8217;s website the IOS file named c3640-js-mz.124-18.bin . The simplest way to do this is to login to the Cisco site with your CCO ID (required), go to the download area and type in this file name in the Software Search box. Once downloaded, browse to the Dynamips installation directory and move this file into the sample_labs\XpressLearn\ios folder</li>
<li>Fire up the Dynamips Server by clicking on Start &#8211;&gt; Dynagen &#8211;&gt; Dynamips Server (We are getting close, feel the anticipation?).</li>
<li>Go back to the folder containing the sw1.net configuration file and right click on the file &#8211;&gt; Open with &#8211;&gt; dg-local</li>
<li>In mere moments, a new window should appear and you should see a greater than prompt (=&gt;) below the words &#8216;Dynagen management console for Dynamips&#8217;. At the prompt, type start SW1 and when returned back to the prompt, type telnet SW1.</li>
<li>A telnet window should appear and within a few seconds wallah! A Cisco router is booting inside the telnet window.</li>
</ol>
<p align="center"><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p>Now, in less than 10 easy steps, you have a Cisco router that is <strong>bridged</strong> to a network that the PC your sitting in front of is connected to. Again, you have a <strong>bridged</strong> connection between the &#8216;virtual&#8217; Cisco router and the network which the hosting pc is connected to. What does this mean you ask? For all practical purposes, there is a Cisco router (which is completely under your control) plugged directly into the network your PC is connected to. The virtual router is not using the hosting PC to hide behind, there is no natting, routing, etc. going on to get this router communicating to the live network. Dynamips uses a shim that sits between the network adapter in your PC and the operating system. This same shim is what is commonly used by sniffer programs to provide full viability to all traffic on the network. Why am I making such a fuss about this? <strong>There is a layer2 connection between the network switch in a wiring closet somewhere and your virtual Cisco router</strong>.</p>
<p>Some may ask, well what can I do with this after all the trouble of setting it up? The answer: just about anything you could if it were a real Cisco router connected to the network with direct console connection to it. Let me show you something &#8216;real&#8217;, but before I do, I must stress no networks were harmed in the making of this article. This was a highly trained individual performing a precise exercise to demonstrate the realities of what is described in this article. Ok, with no further jabbering:</p>
<pre>SW1#sh cdp nei
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
                  S - Switch, H - Host, I - IGMP, r - Repeater
Device ID        Local Intrfce     Holdtme    Capability  Platform  Port ID

BNADC-SW-01.xxx.net

                 Fas 1/0            140         T S       WS-C3548- Fas 0/45</pre>
<p>Hmmm, this virtual Cisco router is swapping CDP information with an access switch. That&#8217;s pretty interesting&#8230;</p>
<p><!--more--></p>
<p>Just by looking at the IP address of the PC running Dynamips you already know the subnet allocation for the vlan your virtual switch is connected to. This means you can try and pick out a static IP on the same subnet that is not used by anything else or, let&#8217;s try this instead of guessing:</p>
<pre>SW1(config)#interface Vlan1
SW1(config-if)#ip address dhcp
SW1(config-if)#end
SW1#
*Mar  1 00:04:50.611: %SYS-5-CONFIG_I: Configured from console by console
*Mar  1 00:04:54.715: %DHCP-6-ADDRESS_ASSIGN: Interface Vlan1 assigned DHCP
address 10.32.20.238, mask 255.255.255.0, hostname SW1</pre>
<p>Yeah, that will do it&#8230; Now my virtual router/switch has a valid IP assigned on the network. Gee wiz, is there much more I can figure out on my own? Dynamips can sniff the traffic flowing through interfaces inside of Dynamips instances. Let&#8217;s turn on capturing for a couple of minutes and see what happens:</p>
<p><a href="http://www.xpresslearn.com/wp-content/uploads/2008/02/dynagenconsolestartingcatpure.gif" title="Starting a packet capture at the Dynagen console"></a></p>
<p style="text-align: center"><a href="http://www.xpresslearn.com/wp-content/uploads/2008/02/dynagenconsolestartingcatpure.gif" title="Starting a packet capture at the Dynagen console"><img src="http://www.xpresslearn.com/wp-content/uploads/2008/02/dynagenconsolestartingcatpure.thumbnail.gif" alt="Starting a packet capture at the Dynagen console" /></a></p>
<p>After giving a few minutes to capture, you can stop the capture so that the file can be opened and viewed in a sniffer program. To stop the capture simply type: no capture SW1 F1/0.  Open up the sw1.dmp inside of your sniffer program, the first thing I see is some EIGRP hello packets &#8211; Let&#8217;s take a look:</p>
<p align="center"><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p style="text-align: center"><a href="http://www.xpresslearn.com/wp-content/uploads/2008/02/dynamipscaptureeigrppacket.gif" title="EIGRP Packet displayed in Sniffer program"><img src="http://www.xpresslearn.com/wp-content/uploads/2008/02/dynamipscaptureeigrppacket.thumbnail.gif" alt="EIGRP Packet displayed in Sniffer program" /></a></p>
<p><a href="http://www.xpresslearn.com/wp-content/uploads/2008/02/dynamipscaptureeigrppacket.gif" title="EIGRP Packet displayed in Sniffer program"></a>Here is the EIGRP packet which came from our default gateway (which of course is the router) and if we look closely, the Autonomous system number is contained inside the hello packet. So, we have discovered EIGRP running in autonomous system 20.  What do you want to be there is no authentication being used in the routing protocol process?  Let&#8217;s give this a shot:</p>
<pre>SW1(config)#router eigrp 20
SW1(config-router)#network 10.32.20.0 255.255.255.0
SW1(config-router)#no auto-summary
SW1(config-router)#end
SW1#
*Mar  1 00:16:39.179: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 100: Neighbor 10.32.20.1 (Ethernet1/0)
is up: new adjacency
*Mar  1 00:16:39.871: %SYS-5-CONFIG_I: Configured from console by console
SW1#
SW1#sh ip eigrp nei
IP-EIGRP neighbors for process 20
H   Address                 Interface       Hold Uptime   SRTT   RTO  Q  Seq
                                            (sec)         (ms)       Cnt Num
0   10.32.20.1            Vl1               11 00:00:47  441  3969  0  26626
SW1#
SW1#sh ip route summary
IP routing table name is Default-IP-Routing-Table(0)
IP routing table maximum-paths is 16
Route Source    Networks    Subnets     Overhead    Memory (bytes)
connected       1           0           72          136
static          0           1           72          136
eigrp 20        77          831         65376       123488
internal        106                                 122536
Total           184         832         65520       246296
SW1#</pre>
<p>Wow, all of a sudden I have a route table with 831 more routes in it.  At this point it would be very easy to inject a host route into the EIGRP routing process.  The purpose of this would be so that a host could be impersonated by another computer.  By injecting this specific route, you can direct all traffic to an unintended destination, which allows you to capture all sorts of sensitive data.  Even by taking just a passive approach by not manipulating EIGRP at all, it has provided us a map of the entire network with the route table.</p>
<p>The possiblities are endless &#8211; maybe the virtual switch get&#8217;s configured for HSRP after you figure out what group number is being used.  Then set a priority that allows all the traffic to flow through your router before it goes back out to it&#8217;s destination.  Granted, the Dynamips instance probably wouldn&#8217;t hold up because of the low forwarding rate, but there could be some damage done before it dynamips crashed.</p>
<p><!--more--></p>
<p>Enough about layer3 stuff, what about spanning tree? We do have a switch module installed, thus we are running spanning-tree. Assuming Per-Vlan spanning tree running on the network, we could at least become the root bridge for the access vlan we are a member of.</p>
<pre>SW1#sh spanning-tree root
VLAN1
  Root ID    Priority    8273
             Address     00d0.636e.cc00
             Cost        23
             Port        41 (FastEthernet1/0)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec</pre>
<p>Wow, all we have to do it set our spanning tree priority for the vlan1 that is configured on the virtual switch to a priority less than 8273.  Once that change is made, now all the traffic on that vlan is flowing through a port on the virtual switch to get to it&#8217;s destination.  Oh, and hopefully there is no way to get connected to a port on the network that allows trunking and especially one that allows trunking with no restrictions on vlans passing through that trunk port.  My My, once a trunk port was established to our virtual switch, we could really get crazy by setting up a VTP server and manipulate the version to a really high number, then wipe out all the vlans on the entire network (assuming vtp is running on the network).</p>
<p>When this article began, the point was to sell making your network more secure.  The entention of this entire exercise was to enlighten on how much easier it becomes to be disruptive when you have (and control) a router/switch that can be plugged into a network.  Please, don&#8217;t take this article as a how-to for disrupting networks &#8211; that is certainly not the intention.</p>
<p>In another article, I will specifically describe how to configure a network to combat against every one of the examples mentioned in this article.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xpresslearn.com/security/dynamips-in-an-unsecured-network/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Host protection using private vlans</title>
		<link>http://www.xpresslearn.com/cisco/host-protection-using-private-vlans</link>
		<comments>http://www.xpresslearn.com/cisco/host-protection-using-private-vlans#comments</comments>
		<pubDate>Thu, 27 Dec 2007 02:09:10 +0000</pubDate>
		<dc:creator>Scott Pilkinton</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[DMZ]]></category>
		<category><![CDATA[isolated port]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[private vlan]]></category>
		<category><![CDATA[switchport protected]]></category>

		<guid isPermaLink="false">http://www.xpresslearn.com/index.php/archives/cisco/host-protection-using-private-vlans</guid>
		<description><![CDATA[Using private vlans to secure hosts on the same subnet from communicating with each other.  This scenerio is desirable in places such as DMZ networks, where non-related hosts need to be secured behind a common firewall interface.]]></description>
			<content:encoded><![CDATA[<p>Rarely do hosts in a DMZ network need to communicate with each other.  However, in order to properly secure hosts from each other, there needs to be some degree of isolation.  Consider this:  There are multiple http servers sitting behind a firewall in a DMZ network.  If the firewall was penetrated and access was obtained to an ftp server in the same DMZ network, the potential would be there to hack any other machine in the DMZ from the compromised server.  Because of this potential, a form of isolation has to be introduced to prevent this exposure.</p>
<p>This isolation can be accomplished through the use of private vlans.  For this example, let&#8217;s assume no one host needs to communicated with another in the DMZ network.  The only common communication needed between hosts is access to the network gateway, which in this case, would be a firewall interface.</p>
<p><span id="more-42"></span></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p>The solution would be to implement private vlans.  There are two vlans required, one to be used for a primary vlan and the other to be used as the isolated vlan.  They would be defined in the following matter:</p>
<pre>switch#config t
switch(config)#vlan 100
switch(config)#name Isolated_SysBackup
switch(config)#private-vlan isolated
switch(config)#vlan 101
switch(config)#name Primary_for_isolated_SysBackup
switch(config)#private-vlan primary
switch(config)#private-vlan association 100</pre>
<p>The two previous vlans are needed for this basic private vlan implementation.  One vlan is considered the primary vlan(101), its purpose is to carry traffic from promiscuous ports to isolated, community, and other promiscuous ports.  The other vlan(100) is used to carry traffic from isolated ports to promiscuous ports.  To simplify, vlan 101 carries traffic from the firewall interface to the DMZ host it is communicating with.  Vlan 100 will carry traffic from the DMZ host to the firewall interface.  Think of vlan 101 carrying traffic in one direction and vlan 100 carrying traffic in the other direction.</p>
<p>The firewall interface serving as the default gateway for all hosts in the dmz would be configured on the connected switchport with the following:</p>
<pre>Switch#config t
Switch(config)#interface gig1/0/48
Switch(config-if)#description bna-fw-01 DMZ
Switch(config-if)#switchport mode private-vlan promiscuous
Switch(config-if)#private-vlan mapping 101 100</pre>
<p>All the hosts that reside in the DMZ would have their switchports configured with the following:</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-0663307349809080";
google_ad_slot = "4388421750";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<pre>switch#config t
switch(config)#interface GigabitEthernet1/0/1
switch(config-if)#description bna-dns-01 Primary
switch(config-if)#switchport private-vlan host-association 101 100
switch(config-if)#switchport mode private-vlan host</pre>
<p>This will effectively prevent any host from talking to another host in the DMZ, however all hosts in the DMZ will communicate with a common firewall interface.</p>
<p>Alternative solution:</p>
<p>Many of the older switches do not support a full private vlan implementation.  However, there is still a way to implement the same functionality using the limited private vlan implementation.  The solution is to use protected ports, which is also referred to as private vlan edge ports.</p>
<p>Protected ports do not forward any traffic to protected ports on the same switch. This means that all traffic passing between protected ports—unicast, broadcast, and multicast—must be forwarded through a Layer 3 device. Protected ports can forward any type of traffic to nonprotected ports, and they forward as usual to all ports on other switches.</p>
<p>Only one vlan is required for this implementation, which would already exist (the DMZ hosts would already be a member of this vlan).  Assume vlan 100 as the vlan defined on the switch, the ports connected to each DMZ host will be configured as:</p>
<pre>switch#config t
switch(config)#interface GigabitEthernet1/0/1
switch(config-if)#switchport access vlan 100
switch(config-if)#switchport protected</pre>
<p>The firewall interface is configured in the standard manner:</p>
<pre>switch#config t
switch(config)#interface GigabitEthernet1/0/48
switch(config-if)#switchport access vlan 100</pre>
<p>The drawback to using protected ports is that if you have multiple switches used your dmz network, hosts on one switch can communicate to hosts on another switch, even if they both have switchport protected configured.  This scenario happens because the uplink port connecting the two switches is not a protected port.  With this limitation in mind, there are some creative ways to work protecting hosts on multiple switches, but it will almost always involve combining technolgies , such as combining with vlan access lists at the distribution layer.</p>
<p>If you only have a few switches that make up your dmz environment and your stuck with having protected port usage only, consider using an aggregate switch.  Each of your dmz switches would be uplinked to the aggregate switch and the port protected command would be configured on the aggregate switch side of the uplinks.  The firewall interface would then plug into the aggregate switch (with no port protection configured).  In this scenerio, the aggregate/distribution switch is preventing a host on one switch from talking to the other.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xpresslearn.com/cisco/host-protection-using-private-vlans/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Basic Security using Access Lists</title>
		<link>http://www.xpresslearn.com/cisco/basic-security-using-access-lists</link>
		<comments>http://www.xpresslearn.com/cisco/basic-security-using-access-lists#comments</comments>
		<pubDate>Mon, 12 Nov 2007 03:59:00 +0000</pubDate>
		<dc:creator>Scott Pilkinton</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Access Lists]]></category>
		<category><![CDATA[ACL]]></category>
		<category><![CDATA[IOS]]></category>

		<guid isPermaLink="false">http://www.xpresslearn.com/index.php/archives/cisco/basic-security-using-access-lists</guid>
		<description><![CDATA[Learn the basic usage of Cisco access lists to secure a host on the network.]]></description>
			<content:encoded><![CDATA[<p>Consider the need to secure services for access only by certain computers.  The HR computers need access to a Payroll system that no one else needs to use.  The HR Payroll application resides on the server subnet with an IP address of 10.0.4.100 and runs on port 443(ssl).  The HR workstation subnet is 10.0.3.0/24 and will be the only network allowed to access the application.</p>
<p><span id="more-33"></span></p>
<pre>hostname CentralLanRouter
!
interface FastEthernet0/0
description Infrastructure Subnet
ip address 10.0.1.1 255.255.255.0
!
interface FastEthernet0/1
description Employee Subnet
ip address 10.0.2.1 255.255.255.0
!
interface FastEthernet1/0
description HR Subnet
ip address 10.0.3.1 255.255.255.0
!
interface FastEthernet1/1
description Server Subnet
ip address 10.0.4.1 255.255.255.0
ip access-class 100 in
!
access-list 100 remark ACL to protect HR Server
access-list 100 permit tcp 10.0.3.0 0.0.0.255 host 10.0.4.100 eq 443
access-list 100 deny ip any host 10.0.4.100
access-list 100 permit ip any any</pre>
<p>The access list 100 defined above accomplishes the following:</p>
<p>Allows IP addresses of 10.0.3.x to access the host 10.0.4.100 via SSL<br />
Denies all other IP addresses from accessing the host 10.0.4.100 via any port<br />
Allows any IP address to access any host</p>
<p>&lt;!&#8211;adsense#inlinepostad&#8211;&gt;</p>
<p>The access list 101 below keeps the server from initiating connections out to other workstations.  This would be used as an additional security measure, in case the Payroll server was compromised.  In the event an intruder got console access to server, you wouldn&#8217;t want it to have the ability to ftp files off the server to another location.</p>
<pre>interface FastEthernet1/1
description Server Subnet
ip address 10.0.4.1 255.255.255.0
ip access-class 100 in
ip access-class 101 out
!
access-list 101 remark ACL to restrict outbound access from the HR server
access-list 101 permit tcp host 10.0.4.100 10.0.3.0 0.0.0.255 gt 1023
access-list 101 deny ip host 10.0.4.100
access-list 101 permit ip any any</pre>
<p>The order of the statements in the access list is the magic, since they get processed line by line from top to bottom.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xpresslearn.com/cisco/basic-security-using-access-lists/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enable ssh without using AAA</title>
		<link>http://www.xpresslearn.com/cisco/general/enable-ssh-without-using-aaa</link>
		<comments>http://www.xpresslearn.com/cisco/general/enable-ssh-without-using-aaa#comments</comments>
		<pubDate>Tue, 04 Sep 2007 02:10:31 +0000</pubDate>
		<dc:creator>Scott Pilkinton</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.xpresslearn.com/index.php/archives/15</guid>
		<description><![CDATA[Enabling ssh on a Cisco device without using or enabling AAA.]]></description>
			<content:encoded><![CDATA[<p><strong>Scenario:</strong></p>
<p>You want to enable ssh access to manage a cisco device, but don&#8217;t want to use AAA.</p>
<p><strong>Solution:</strong></p>
<p>First, make sure a local username/password is defined on the device</p>
<p>Router(config)# username admin password cisco</p>
<p>Second, Generate a general use key for the ssh encryption:</p>
<p>Router(config)# crypto key generate rsa general-keys exportable</p>
<p>This message will appear next, enter one of the three common values at the prompt: 512, 1024, 2048</p>
<p><span class="content"></span></p>
<pre>Choose the size of the key modulus in the range of 360 to 2048 for your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits in the modulus [512]:
% Generating 512 bit RSA keys ...[OK]</pre>
<p>Next, change ssh to use version 2:</p>
<p>Router(config)# ip ssh version 2</p>
<p>Configure the vty lines, which is used when accessing the device:</p>
<p>Router(config)# line vty 0 4</p>
<p>Important next step:  Tell the router to authenticate using local authentication &#8211; otherwise login will fail</p>
<p>Router(config)# login local</p>
<p>Configure lines to only accept ssh logins, which effictively disables accessing the device via Telnet :</p>
<p>Router(config)# transport input ssh</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xpresslearn.com/cisco/general/enable-ssh-without-using-aaa/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Switch Port Security</title>
		<link>http://www.xpresslearn.com/security/switch-port-security</link>
		<comments>http://www.xpresslearn.com/security/switch-port-security#comments</comments>
		<pubDate>Fri, 31 Aug 2007 02:39:31 +0000</pubDate>
		<dc:creator>Scott Pilkinton</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Switching]]></category>

		<guid isPermaLink="false">http://www.xpresslearn.com/index.php/archives/14</guid>
		<description><![CDATA[Put controls in place to combat against end users putting desktop switches on the end of an ethernet connection to increase number of ports available.]]></description>
			<content:encoded><![CDATA[<p>Here is one way to combat against unauthorized switches being connected by end users, which is typically done to increase the number of ports available at a location.</p>
<p>Enable port security:</p>
<blockquote><p>Switch(config)#errdisable recovery cause psecure-violation<br />
Switch(config)#int fa0/1<br />
Switch(config-if)#switchport mode access<br />
Switch(config-if)#switchport port-security<br />
Switch(config-if)#switchport port-security maximum 1<br />
Switch(config-if)#switchport port-security violation shutdown<br />
Switch(config-if)#end</p></blockquote>
<p>The configuration above will enable port security on fastethernet0/1, which would go out to an end user workstation.  If someone placed a small switch/hub at the end of the connection in order to connect a second device (such as a network printer, another workstation, etc.), a second mac-address would be detected.  This triggers the access switch to shutdown the port (and sending an snmp trap), effectively cutting off all connectivity to the network.</p>
<p>The global configuration command shown above: <strong>errdisable recovery cause psecure-violation</strong> causes the port to be brought out of shutdown state automatically after the default timer expires.  The errdisable recovery timer can be changed from the default of 300 seconds using the errdisable recovery interval command.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xpresslearn.com/security/switch-port-security/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Router local authentication and authorization</title>
		<link>http://www.xpresslearn.com/security/router-local-authentication-and-authorization</link>
		<comments>http://www.xpresslearn.com/security/router-local-authentication-and-authorization#comments</comments>
		<pubDate>Mon, 20 Aug 2007 04:46:51 +0000</pubDate>
		<dc:creator>Scott Pilkinton</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.xpresslearn.com/index.php/archives/11</guid>
		<description><![CDATA[Use the local router database to authenticate and assign privilege levels to users]]></description>
			<content:encoded><![CDATA[<p>In the past when securing the login to a router using local passwords (no TACACS or Radius Servers), there would be several places where passwords had to be defined.  Minimal passwords required so that telnet access would work were:</p>
<blockquote><p>enable secret secretpw<br />
line vty 0 4<br />
password telnetpw</p></blockquote>
<p>Another password needed to be assigned to secure logins via the console port:</p>
<blockquote>
<p align="left">line con0<br />
password consolepw</p></blockquote>
<p align="left">If there was a modem attached for remote out-of-band access, yet another password was assigned to the auxiliary port:</p>
<blockquote>
<p align="left">line aux 0<br />
password  modempw</p></blockquote>
<p align="left">With &#8216;tripple A&#8217; or AAA, access can be defined in a more centralized manner &#8211; regardless of the database being used (local, TACACS, Radius, etc&#8230;).  Consider the following configuration:</p>
<blockquote>
<p align="left">enable secret secretpw<br />
username Admin privilege 15 secret adminpw (<em>engineer login</em>)<br />
username Monitor privilege 1 secret monitorpw (<em>helpdesk login for basic troubleshooting only</em>)<br />
aaa authentication login default local enable (<em>the default authentication list will cover logins via all sources &#8211; Console, AUX, and Telnet</em>)<br />
aaa authorization console (<em>consider privilege levels at console logins</em>)<br />
aaa authorization exec default local (<em>consider privilege levels at telnet logins</em>)</p></blockquote>
<p>This configuration will produce:</p>
<p>An enable prompt for the admin login:</p>
<p>User Access Verification</p>
<p>Username: admin<br />
Password:</p>
<p>R1#</p>
<p>A non-privileged router prompt for the monitor login:</p>
<p>User Access Verification</p>
<p>Username: monitor<br />
Password:</p>
<p>R1&gt;</p>
<p align="left">&nbsp;</p>
<p align="left">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xpresslearn.com/security/router-local-authentication-and-authorization/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

