Monday, July 21, 2008
Create and Self-Sign Certs on the Netscaler Application Switch
create ssl rsakey ops-ca.key 1024
create ssl certreq ops-ca.csr -keyfile ops-ca.key
create ssl cert ops-ca.crt ops-ca.csr ROOT_CERT -keyfile ops-ca.key
shell
echo '01' > ops-ca-serial.srl
exit
#Create a Server cert for the NetScaler (for testing, if required)
create ssl rsakey ops-vip.key 1024
create ssl certreq ops-vip.csr -keyfile ops-vip.key
create ssl cert ops-vip.crt ops-vip.csr SRVR_CERT -CAcert ops-ca.crt -CAkey ops-ca.key -CAserial serial.srl
#create key and csr on the apache web servers
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out opswebserver_01.csr
#copy the csr back to the netscaler
#sign csr's from the web servers with the CA created on the netscaler
create ssl cert /nsconfig/ssl/opswebserver_01.crt /nsconfig/ssl/opswebserver_01.csr SRVR_CERT -CAcert /nsconfig/ssl/ops-ca.crt -CAkey /nsconfig/ssl/ops-ca.key -CAserial /nsconfig/ssl/ops-ca-serial.srl
#copy the crt back to the apache server and put it in the appropriate place and edit ssl.conf
#add the in-memory cert object that holds the SSL server certificate information for SSL handshakes
add ssl certkey ops-certkey -cert ops-vip.crt -key ops-vip.key
#bind the certkey to a vserver
bind ssl certkey Ops_VIP ops-vip.key [ -vserver | -service ]
#dont forget to copy all files in /nsconfig/ssl to the second netscaler
Final Key
#create new csr
create ssl certreq opsportal.someurl.com.csr -keyfile opsportal.someurl.com.key
#copy key file to second netscaler
#passphrase: xxxxx
#Submit csr to verisign
#Copy verisign cert into text file
#Copy cert file to both netscalers
#Create certkey on netscaler
add ssl certKey portal.cert -cert ops-portal.someurl.com.crt -key opsportal.someurl.com.key
#add Verisign intermediate cert
add ssl certkey vrisgn.intmed.cert -cert /nsconfig/ssl/verisign.intermediate.cert.crt
#link intermediate cert to portal-certkey
link ssl certkey portal.cert vrisgn.intmed.cert
#bind certkey to vserver
bind ssl certkey ops_vip opsportal.someurl.com.key -vserver
Monday, May 26, 2008
Install and Configure Snort on CentOS
groupadd snort
useradd -g snort snort –s /sbin/nologin
passwd snort
chkconfig apmd off
chkconfig cups off
chkconfig isdn off
chkconfig netfs off
chkconfig nfslock off
chkconfig pcmcia off
chkconfig portmap off
rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-4
yum -y update
chkconfig yum on
service yum start
yum –y install mysql mysql-bench mysql-server mysql-devel mysqlclient10 php-mysql httpd gcc pcre-devel php-gd gd mod_ssl glib2-devel gcc-c++
# In the /etc/ssh/sshd_config file change the following lines (if it is commented out remove the #):
Protocol 2
PermitRootLogin no
PermitEmptyPasswords no
service sshd restart
chkconfig httpd on
chkconfig mysqld on
service httpd start
service mysqld start
cd /var/www/html
wget http://www.internetsecurityguru.com/index.php.txt
mv ./index.php.txt ./index.php
cd /root
mkdir /root/snortinstall/
cd /root/snortinstall/
wget http://www.snort.org/dl/current/snort-2.6.1.5.tar.gz
tar xvzf snort-2.6.1.5.tar.gz
cd snort-2.6.1.5
./configure --with-mysql --enable-dynamicplugin
make
make install
mkdir /etc/snort
mkdir /etc/snort/rules
mkdir /var/log/snort
cd /root/snortinstall/snort-2.6.1.5/etc/
# (make not this is not /etc. it is the etc dir under the snort source code)
cp * /etc/snort
#Download BASE
cd ~/snortinstall/
wget http://easynews.dl.sourceforge.net/sourceforge/secureideas/base-1.2.6.tar.gz
cd /var/www/html
tar xvzf /root/snortinstall/base-1.2.6.tar.gz
mv base-1.2.6/ base/
mkdir /root/snortinstall/rules
cd /root/snortinstall/rules
wget http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/snortrules-pr-2.4.tar.gz
tar xvzf /root/snortinstall/rules/snortrules-pr-2.4.tar.gz
cd /root/snortinstall/rules/rules
cp * /etc/snort/rules
#Copy the signatures into the BASE application directory
cd ~/snortinstall/rules/
mv ./doc/signatures/ /var/www/html/base/
#Modify your snort.conf file
var HOME_NET 10.0.0.0/24 (make this what ever your internal network is, use CIDR.
var EXTERNAL_NET !$HOME_NET (this means everything that is not your home net is external to your network)
#change “var RULE_PATH ../rules” to “var RULE_PATH /etc/snort/rules”
#After the line that says “preprocessor stream4_reassemble” add a line that looks like
preprocessor stream4_reassemble: both,ports 21 23 25 53 80 110 111 139 143 445 513 1433
output database: log, mysql, user=snort password=
dbname=snort host=localhost
#Change directory to /etc/init.d and type:
cd /etc/init.d
wget http://internetsecurityguru.com/snortinit/snort
chmod 755 snort
chkconfig snort on
===========
mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD('r3m0t3c0ntr0l');
>Query OK, 0 rows affected (0.25 sec)
mysql> create database snort;
>Query OK, 1 row affected (0.01 sec)
mysql> grant INSERT,SELECT on root.* to snort@localhost;
>Query OK, 0 rows affected (0.02 sec)
mysql> SET PASSWORD FOR snort@localhost=PASSWORD('sn0rt');
>Query OK, 0 rows affected (0.25 sec)
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost;
>Query OK, 0 rows affected (0.02 sec)
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort;
>Query OK, 0 rows affected (0.02 sec)
mysql> exit
>Bye
===========
mysql
SET PASSWORD FOR root@localhost=PASSWORD('r3m0t3c0ntr0l');
create database snort;
grant INSERT,SELECT on root.* to snort@localhost;
SET PASSWORD FOR snort@localhost=PASSWORD('sn0rt');
grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost;
grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort;
exit
mysql -u root -p < ~/snortinstall/snort-2.6.1.5/schemas/create_mysql snort
#Hand configure the firewall:
cd /etc/sysconfig/
#edit the iptables file
#and delete the lines
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
#change the line
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
#to
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
#change the line
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
#to
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j DROP
service iptables restart
cd /root/snortinstall
pear install Image_Graph-alpha Image_Canvas-alpha Image_Color Numbers_Roman
#Download ADODB
cd ~/snortinstall/
wget http://easynews.dl.sourceforge.net/sourceforge/adodb/adodb480.tgz
cd /var/www/
tar xvzf /root/snortinstall/adodb480.tgz
cp /var/www/html/base/base_conf.php.dist /var/www/html/base/base_conf.php
#Edit the “base_conf.php” file and insert the following perimeters
$BASE_urlpath = "/base";
$DBlib_path = "/var/www/adodb/ ";
$DBtype = "mysql";
$alert_dbname = "snort";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "snort";
$alert_password = "sn0rt";
service snort start
#goto here to finish setting up the database
https://ip_address/base
#Secure BASE
mkdir /var/www/passwords
/usr/bin/htpasswd -c /var/www/passwords/passwords base
#Edit the httpd.conf (/etc/httpd/conf/httpd.conf). I put it under the section that has:
Options FollowSymLinks
AllowOverride None
AuthType Basic
AuthName "SnortIDS"
AuthUserFile /var/www/passwords/passwords
Require user base
service httpd restart
Thursday, April 17, 2008
Netscaler Configuration Backup Script
----------
for /f "tokens=2-4 delims=/ " %%a in ('DATE/T') do set mdate=%%c%%a%%b
mkdir f:\backup\netscaler\ns01\%mdate%
scp -i c:\cygwin\home\Administrator\.ssh\id_backup01_rsa -r nsroot@172.18.1.20:/nsconfig/* /cygdrive/f/backup/netscaler/ns01/%mdate%
Sunday, March 23, 2008
Citrix Presentation Server Basic Requirements
Add/Remove Programs
- Terminal Services
- IIS+ASP.Net
- SNMP
- .Net 2.0 Framework
Windows Update
When starting a new ICA session make sure that the user, or a group that the user is a member of, is in the servers local group named "Remote Desktop Users"
Sunday, February 3, 2008
Configuring two Netscaler Application Switches as a High Availability pair
add node 2 172.18.1.22
set interface 1/1 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/2 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/3 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/4 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/5 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/6 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/8 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
On Secondary NS (172.18.1.22):
set node -hastatus STAYSECONDARY
add node 1 172.18.1.20
set interface 1/1 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/2 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/3 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/4 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/5 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/6 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set interface 1/8 -speed AUTO -duplex AUTO -autoneg ENABLED -hamonitor OFF -state DISABLED
set node -hastatus ENABLE
Thursday, January 10, 2008
Policy-driven Content Filtering on the Netscaler Application Switch
> add expression e1 url == /dts
> add expression e2 url == /DTS
> add filter dts_filter -reqrule "e1||e2" -reqaction RESET
> add action dts_action
> show action
> show filter
> bind lb vserver somename_vip -policyName dts_filter
Friday, December 28, 2007
How to set up a Netscaler Application Switch
#set root password
set system user nsroot newpasswd1
#add mapped ip, this is the interface for connections to servers (inside)
add ns ip x.x.x.x 255.255.255.0 -type mip
#set netscaler ip (nsip), this ip used for administration only
set ns config -ipaddress x.x.x.x -netmask 255.255.255.0
#set default gateway on nsip
add route 0.0.0.0 0.0.0.0 x.x.x.x
#save config
save ns config
reboot
#open the gui
http://nsip/
=====
Wednesday, December 5, 2007
Using IP's instead of domain names for NTP server configuration
Typically I set my monitoring server up as the NTP check point for all the other servers and network devices in my network. But I also provide each system with a list of fallback servers.
I like to use the pool servers from ntp.org
There are about 1700 active servers, today.
Thursday, November 15, 2007
Configuring NTP in Cisco IOS
ntp server 98.172.32.171
ntp server 208.113.193.9
ntp server 216.184.20.83
ntp server 66.250.45.2
clock timezone PST -8
Configuring NTP in Windows
net stop w32time
net start w32time
w32tm /resync
Configuring NTP in *nix or BSD
---------------------------
server 0.pool.ntp.org # A stratum 1 server at ntp.org
server 1.pool.ntp.org # A stratum 1 server at ntp.org
server time.nist.gov # A stratum 2 server at nist
restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict 1.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
restrict time.nist.org mask 255.255.255.255 nomodify notrap noquery
restrict 10.10.1.0 mask 255.255.255.0 nomodify notrap
restrict 127.0.0.1
---------------------------
On linux systems that use chkconfig utility:
---------------------------
chkconfig ntpd on
service ntpd start
service ntpd stop
service ntpd restart
---------------------------
On other systems:
---------------------------
pkill -HUP -x ntpd
---------------------------
Verify that ntpd is running:
---------------------------
ps auxwww | grep ntpd
---------------------------
Syncronize
check the date: `date`
stop ntpd: `pkill -x ntpd`
run ntpdate: `ntpdate -u
note: its possible that this command may need to be run several times.
use the offset to determine acceptable offset values.
start ntpd:
check sync: `ntpq -p`
Monday, October 15, 2007
Using Native VLAN's for improved security and redundancy
I hope this is the appropriate place for it, but here is how I set it up, straight from the documentation I wrote.
——
+ Set up the Aggregated Ports
Set up PAGP on Switch01 side
# conf t
(config)# interface range gi 1/43 - 44
(config-if-range)# channel-group 1 mode desirable
Set up PAGP on Switch02 side
(config)# interface range gi 1/43 - 44
(config-if-range)# channel-group 1 mode desirable
port-channel 1 is the resulting virtual interface
The following command will verify what has been set up.
# show etherchannel summary
Set up the IEEE 802.1Q Trunk
SW02
(config)# interface port-channel 1
(config-if)# switchport trunk encapsulation dot1q
(config-if)# switchport mode trunk
SW01
(config)# interface port-channel 1
(config-if)# switchport trunk encapsulation dot1q
(config-if)# switchport mode trunk
+ Configure VTP
SW01
(config)# vtp mode server
(config)# vtp domain xxxxxxx
(config)# vtp password xxxxxxxxxxxxxxx
SW02
(config)# vtp mode server
(config)# vtp domain xxxxxxx
(config)# vtp password xxxxxxxxxxxxxxx
+ Vlan Configuration
SW01
Create Dummy VLANs
(config)# vlan 2
(config-vlan)# name dummy_vlan2
(config)# vlan 3
(config-vlan)# name dummy_vlan3
(config)# vlan 4
(config-vlan)# name dummy_vlan4
(config)# end
Suspend dummy_vlan’s
#vlan database
#vlan 2 state suspend
#vlan 3 state suspend
#vlan 4 state suspend
Create Active VLAN’s
#vlan 20
#name PUBLIC_VLAN
#interface range 1/1 - 4
#switchport access vlan 20
#switchport trunk native vlan 2
#vlan 30
(config-vlan)#name DMZ_VLAN
(config-vlan)#interface range 1/17 - 32
(config-vlan)#switchport access vlan 30
(config-vlan)#switchport trunk native vlan 3
#vlan 40
(config-vlan)#name INSIDE_VLAN
(config-vlan)#interface range 1/33 - 35
(config-vlan)#switchport access vlan 40
(config-vlan)#switchport trunk native vlan 4
Configure Trunk Interface
(config)# interface port-channel 1
(config-if)# switchport trunk allowed vlan 20,30,40
(config-if)#end
# wr mem
Monday, August 27, 2007
Calculating Power Requirements for our Data Center
Its simple to get the wattage: volts · amps = watts
Next I designated which devices should be grouped and started playing with the elevations. Then I added up all the max watts of the individual pieces of equipment in each rack and divided by the number of circuits going into that rack (4). Essentially, the load will be distributed over four circuits. Should one of the circuits go down, we'd want to be able to run everything connected to a given PTXL unit on a single branch circuit. Because we can only draw 80% of the power available on a single circuit at any given moment (16A / circuit in this case), our goal is to stay well below 40% utilization on each circuit to allow for a complete failover and allow some room for growth.
So, to begin I subtracted that sum of all the equipment destined for a single rack from 3840W ((120 · 20)2 · 0.8) , which is 80% of the total watts available between the two primary circuits, and that gives me a gross approximation on the max wattage for that rack. Next I divided the equipment between the 2 PTXL units within each cage (see below about PTXL). Typically when a server starts up, the device temporarily draws more power during the POST, spinning up all fans and whatnot. However, a device will typically idle at half or a third of its max wattage. So, in a rack where your power margins are getting thin, you'll want to consider a device like the PTXL which allows you to prioritize power ports and set delays on them. Why? In a catastrophic power-loss scenario, a well designed implementation would stage the start-up sequence such that the storage devices would come up first, then probably the switches would come up, then the routers, and then the hosts. Each environment is different, so it varies.
To get the most for our money, and to use the power most efficiently, we'd want to pull in 3-phase power, but for some reason the data center services are all freaked out about an extra wire, the cost is 3-times that of single phase power. Anyhow, I contacted the data center (Equinix) to learn their max power/sq ft. It basically worked out to 80A/rack or four 120V/20A branch circuits for each rack (two are primary, two are redundant). I picked the NEMA L5-20 twist-n-lock plug type, specifically because I knew that the data center facility provides the power drops above the rack, with the plug receptacle facing down.
Another consideration when ordering power at a data center is where the circuit will be internally sourced. Be sure that redundant circuits from are sourced from different power banks than the primary circuit. Get a map from the data center on their power layout, it will allow you to double check the work that has been done by the facility engineers. Its always a good idea to make friends with these guys...
I bought two ServerTech Power Tower XL (PTXL) HF16 units per rack and everything has been working out very well. Each unit is IP addressable and has a web interface control panel, that's rather smartly designed, though I have never used it and disabled it. I can also fold the monitoring of these systems into my own monitoring framework because of SNMP (and it does support SNMPv3), and I can simply walk up to the rack and see what our load is at any time. Much to my surprise, the tty and www administration consoles are equivalent. Nice work ServerTech!
Sunday, August 12, 2007
My Favorite Citrix/Virtualization Websites
http://www.rtfm-ed.co.uk/
http://blog.scottlowe.org/
http://www.vmguru.com/
http://www.dabcc.com
http://virtrix.blogspot.com/
http://www.stefanschuller.com/
http://www.thin-world.com/
http://www.brianmadden.com
And a few others...
http://www.vmwarez.com/index.html
http://blogs.technet.com/virtualization/
http://x86virtualization.com/
Wednesday, July 25, 2007
Terabyte, Petabyte, Exabyte, Zettabyte, Yottabyte
-----
After Terabyte comes a Petabyte then Exabyte then Zettabyte then Yottabyte
(not spelled after the great Jedi Master :-(
(interesting fact: 2 Pedabytes would store the entire contents of ALL US
academic libraries).
Megabyte = 1/1152921504606846976 yottabyte
= 1/1125899906842624 zettabyte
= 1/1099511627776 exabyte
= 1/1073741824 petabyte
= 1/1048576 terabyte
= 1/1024 gigabyte
= 1 megabyte
= 8 Megabits
= 1024 kilobytes
= 8192 Kilobits
= 1048576 bytes
= 2097152 nibbles
= 8388608 bits
gigabyte = 1/1125899906842624 yottabyte
= 1/1099511627776 zettabyte
= 1/1073741824 exabyte
= 1/1048576 petabyte
= 1/1024 terabyte
= 1 gigabyte
= 1024 megabytes
= 8192 Megabits
= 1048576 kilobytes
= 8388608 Kilobits
= 1073741824 bytes
= 2147483648 nibbles
= 8589934592 bits
terabyte = 1/1099511627776 yottabyte
= 1/1073741824 zettabyte
= 1/1048576 exabyte
= 1/1024 petabyte
= 1 terabyte
= 1024 gigabytes
= 1048576 megabytes
= 8388608 Megabits
= 1073741824 kilobytes
= 8589934592 Kilobits
= 1099511627776 bytes
= 2199023255552 nibbles
= 8796093022208 bits
petabyte = 1/1073741824 yottabyte
= 1/1048576 zettabyte
= 1/1024 exabyte
= 1 petabyte
= 1024 terabytes
= 1048576 gigabytes
= 1073741824 megabytes
= 8589934592 Megabits
= 1099511627776 kilobytes
= 8796093022208 Kilobits
= 1125899906842624 bytes
= 2251799813685248 nibbles
= 9007199254740992 bits
Exabyte = 1/1048576 yottabyte
= 1/1024 zettabyte
= 1 exabyte
= 1024 petabytes
= 1048576 terabytes
= 1073741824 gigabytes
= 1099511627776 megabytes
= 8796093022208 Megabits
= 1125899906842624 kilobytes
= 9007199254740992 Kilobits
= 1152921504606846976 bytes
= 2305843009213693952 nibbles
= 9223372036854775808 bits
Zettabyte = 1/1024 yottabyte
= 1 zettabyte
= 1024 exabytes
= 1048576 petabytes
= 1073741824 terabytes
= 1099511627776 gigabytes
= 1125899906842624 megabytes
= 9007199254740992 Megabits
= 1152921504606846976 kilobytes
= 9223372036854775808 Kilobits
= 1180591620717411303424 bytes
= 2361183241434822606848 nibbles
= 9444732965739290427392 bits
yottabyte = 1 yottabyte
= 1024 zettabytes
= 1048576 exabytes
= 1073741824 petabytes
= 1099511627776 terabytes
= 1125899906842624 gigabytes
= 1152921504606846976 megabytes
= 9223372036854775808 Megabits
= 1180591620717411303424 kilobytes
= 9444732965739290427392 Kilobits
= 1208925819614629174706176 bytes
= 2417851639229258349412352 nibbles
= 9671406556917033397649408 bits