<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.jcihosting.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=76.88.21.129</id>
	<title>JCWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.jcihosting.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=76.88.21.129"/>
	<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Special:Contributions/76.88.21.129"/>
	<updated>2026-09-01T06:47:36Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Uncancel_in_MGMT&amp;diff=1197</id>
		<title>Uncancel in MGMT</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Uncancel_in_MGMT&amp;diff=1197"/>
		<updated>2013-04-02T21:28:36Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is a manual database update to the following tables: fields&lt;br /&gt;
&lt;br /&gt;
* customers: status-&amp;gt;1&lt;br /&gt;
* ipmap: (for each ip) relen_date-&amp;gt;null, status-&amp;gt;1&lt;br /&gt;
* subs: (for last/current sub(s)) status-&amp;gt;1, stop_date-&amp;gt;null&lt;br /&gt;
* systems: status-&amp;gt;1, stop_date-&amp;gt;null, cancel_date-&amp;gt;null&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Uncancel_in_MGMT&amp;diff=1196</id>
		<title>Uncancel in MGMT</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Uncancel_in_MGMT&amp;diff=1196"/>
		<updated>2013-04-02T21:27:58Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this is a manual database update to the following tables: fields&lt;br /&gt;
&lt;br /&gt;
* customers: status-&amp;gt;1&lt;br /&gt;
* ipmap: (for each ip) relen_date-&amp;gt;null, status-&amp;gt;1&lt;br /&gt;
* subs: status-&amp;gt;1, stop_date-&amp;gt;null&lt;br /&gt;
* systems: status-&amp;gt;1, stop_date-&amp;gt;null, cancel_date-&amp;gt;null&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Payment_System&amp;diff=1192</id>
		<title>Payment System</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Payment_System&amp;diff=1192"/>
		<updated>2013-03-30T15:52:16Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Cancelled PayPal Subs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview / Billing System =&lt;br /&gt;
&lt;br /&gt;
We handle payments in a fairly straightforward manner- each customer has a running ledger ([[Management_System_/_Public_Website_/_Signup_/_Account_Manager#jc:billing_history|jc:billing_history]]). Any negative balance in the ledger will trigger the customer to be billed that amount to whatever payment source is on file, provided one exists. A positive balance will remain on file as a credit towards future service charges.&lt;br /&gt;
&lt;br /&gt;
The [[Infrastructure_Machines#Cronjobs|biller.pl]] script will look through the [[Management_System_/_Public_Website_/_Signup_/_Account_Manager#jc:subs|jc:subs]] database at 00:25 PT to gather up service charges due as of the time/date the biller.pl script is run. Those amounts will add to a negative (amount due) balance.&lt;br /&gt;
&lt;br /&gt;
The [[Infrastructure_Machines#Cronjobs|pfp_batch_gather.pl]] script will run at 13:10 PT to look for customers with a balance due and an active ([[Management_System_/_Public_Website_/_Signup_/_Account_Manager#jc:pmt_source|jc:pmt_source.status=1]] and [[Management_System_/_Public_Website_/_Signup_/_Account_Manager#jc:pmt_source|jc:pmt_source.type=&#039;f&#039;]]) credit card pmt source, and build a list of items ([[Management_System_/_Public_Website_/_Signup_/_Account_Manager#jc.pfp_batch|jc.pfp_batch]]) to charge via payflow.&lt;br /&gt;
&lt;br /&gt;
The [[Infrastructure_Machines#Cronjobs|pfp_batch_process.pl]] script will run at 14:10 PT to process whatever is in  [[Management_System_/_Public_Website_/_Signup_/_Account_Manager#jc.pfp_batch|jc.pfp_batch]].&lt;br /&gt;
&lt;br /&gt;
The [[Infrastructure_Machines#Cronjobs|pb_batch_gather.pl]] script will run at 13:15 PT to look for customers with a balance due and an active ([[Management_System_/_Public_Website_/_Signup_/_Account_Manager#jc:pmt_source|jc:pmt_source.status=1]] and [[Management_System_/_Public_Website_/_Signup_/_Account_Manager#jc:pmt_source|jc:pmt_source.type=&#039;b&#039;]]) paypal (billing agreement) pmt source, and build a list of items ([[Management_System_/_Public_Website_/_Signup_/_Account_Manager#jc.pb_batch|jc.pb_batch]]) to charge paypal.&lt;br /&gt;
&lt;br /&gt;
The [[Infrastructure_Machines#Cronjobs|pb_batch_process.pl]] script will run at 14:15 PT to process whatever is in  [[Management_System_/_Public_Website_/_Signup_/_Account_Manager#jc.pb_batch|jc.pb_batch]].&lt;br /&gt;
&lt;br /&gt;
= PayFlow =&lt;br /&gt;
== Performing a refund ==&lt;br /&gt;
Refunding money via PayFlow must be done manually (simply adding a credit to a ledger will not result in funds going back on a card, it will simply carry forward as a credit towards future charges). To perform a refund, first login: https://manager.paypal.com/&lt;br /&gt;
&lt;br /&gt;
Go to the virtual terminal, choose single transaction, transaction type: Credit&lt;br /&gt;
&lt;br /&gt;
In the original transaction ID field enter the payment ref from the customer&#039;s billing information, e.g. ELEP7DF85E73&lt;br /&gt;
Credit Card Number should be left blank. After submitting enter the amount to refund, all other fields should be left as is. If the amount is too big (i.e. above the amount we have set for refunds, you&#039;ll need to raise that limit in the account settings, then retry the refund). &lt;br /&gt;
&lt;br /&gt;
After the refund is processed, you should enter it as a payment (negative amount) and copy over the transaction ID from the refund, into the customer&#039;s payments so we have a record of it. To do this: management -&amp;gt; (customer&#039;s page) edit/view sources/pmts -&amp;gt; add payment -&amp;gt; enter amount, date, pnref (unique transaction ID of the refund transaction), result code (0 for success), vendor (PayFlow), leave add to ledger checked (so it will show up in billing history).&lt;br /&gt;
&lt;br /&gt;
== Card Data ==&lt;br /&gt;
&lt;br /&gt;
In the event we ever have to re-enter all credit card data (i.e. moving to a new card processor) we encrypt and store card data for each transaction coming in. Each time card info comes in it is stored in &amp;lt;tt&amp;gt;/usr/local/www/scripts/ccard_orders/done/xxxxxx.gpg&amp;lt;/tt&amp;gt; If the data comes in as the result of a signup, the file name is randomized and must be renamed with the correct customer ID. If the data comes in from the card input page or via the AM, then it will be correctly named with the customer ID. To decrypt the data:&lt;br /&gt;
(as root):&lt;br /&gt;
 mail /home/support# gpg --decrypt /usr/local/www/ccard_orders/done/xxxxxx.gpg&lt;br /&gt;
&lt;br /&gt;
= Payment-related emails = &lt;br /&gt;
== &amp;quot;No Payment Received for JohnCompanies account - Action Required - WARNING - SHUTDOWN IMMINENT&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(NOTE: this is the 4th notice we have sent in 6 weeks - please respond immediately)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Re:&lt;br /&gt;
&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
Our records indicate that your billing is not current for your JohnCompanies account -&lt;br /&gt;
you may have recently changed billing information or perhaps initiated new service or&lt;br /&gt;
altered existing service.&lt;br /&gt;
&lt;br /&gt;
This is not a problem - we simply need you to immediately visit your Account Manager via&lt;br /&gt;
this link:&lt;br /&gt;
&lt;br /&gt;
https://secure.johncompanies.com/am/billing.html?cid=col02020&lt;br /&gt;
&lt;br /&gt;
which contains your current and/or past-due charges in detail. Please do contact&lt;br /&gt;
payments@johncompanies.com if you have any questions at all.&lt;br /&gt;
&lt;br /&gt;
Thank you so much for your continued business - we appreciate it greatly,&lt;br /&gt;
&lt;br /&gt;
JohnCompanies Hosting&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We send out automatic notices to customers who were paying via credit card (have a negative ledger balance) and are marked in the database as in arrears. The send schedule is (subject addendum):&lt;br /&gt;
week 1&amp;lt;br&amp;gt;&lt;br /&gt;
week 3 (&amp;quot;SECOND NOTICE&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
week 5 (&amp;quot;THIRD NOTICE - PLEASE RESPOND&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
week 6 (&amp;quot;WARNING - SHUTDOWN IMMINENT&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
and weekly thereafter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action to take:&#039;&#039;&#039; Once we see the WARNING - SHUTDOWN IMMINENT notice, we take action to put their server on shutdown in mgmt. We set a cancel date for 10 days in advance and set a note like: &amp;quot;20121024 - no pmt, setup shutdown&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;batch gather report - 5 ($-1720)&amp;quot; ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
accounts with balances: 50&lt;br /&gt;
items added to pfp batch queue: 5 ($-1720)&lt;br /&gt;
accounts with alternate (non-ccard) pmt source: 41 ($-16920.06)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shows you how many accounts have balances (50) how many items were added to the batch and their cumulative value (5, $1720) and the number of accounts and the amount due for customers with no valid payment source (41, $16920.06)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action to take:&#039;&#039;&#039; Watch that the [[#.22batch_process_report_-_4_.28.241596.29.22|batch process report - 4 ($1596)]] email roughly matches what was gathered today. Delete email.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;batch process report - 4 ($1596)&amp;quot; ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
items processed: 9&lt;br /&gt;
items billed successfully: 4 ($1596)&lt;br /&gt;
items failed to bill: 5 ($629)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Shows you how many items were in the queue. How many were billed successfully and the total amount (4, $1596), and the items that failed and their value (5, $629)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action to take:&#039;&#039;&#039;Make sure &#039;&#039;something&#039;&#039; was processed today- maybe a payflow error? Delete email.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;failed pfp_batch item for col01788&amp;quot; ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RESPMSG:Declined: 15005-This transaction cannot be&lt;br /&gt;
processed.;X-VPS-REQUEST-ID:1349989805Scol01788;CVV2MATCH:X;AVSADDR:N;PROCCVV2:I;PROCAVS:&lt;br /&gt;
N;HOSTCODE:15005;PNREF:EQFP7B38D1B3;RESULT:12;AVSZIP:N;IAVS:N;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indicates we have tried to bill this card 5 times and it has failed each time, and now the customer has been placed in arrears (will get automatic email reminders with payment link) and their charge has been removed form the payflow batch queue [[https://secure.johncompanies.com/mgmt/pfp_batch.html https://secure.johncompanies.com/mgmt/pfp_batch.html]]&lt;br /&gt;
In the body of the email you can see details about the reason for failure, usually a decline (as in this example).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action to take:&#039;&#039;&#039;Make sure it&#039;s a standard decline and nothing else wrong. Customer is in arrears, they&#039;ll be emailed. Delete email.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Subscription cancelled for S-1111111111111&amp;quot; ==&lt;br /&gt;
&#039;&#039;&#039;Action to take:&#039;&#039;&#039; See [[Payment_System#Cancelled_PayPal_Subs|Cancelled PayPal Subs]]. Delete email.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;successful pmt for col01111&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RESPMSG:Approved;PPREF:0RH20660AL5779445;AUTHCODE:111111;X-VPS-REQUEST-ID:1349524679Scol0&lt;br /&gt;
2154;CVV2MATCH:Y;AVSADDR:Y;PROCCVV2:M;PROCAVS:Y;CORRELATIONID:20f200c78b60e;PNREF:ESYP9EC&lt;br /&gt;
9E9FF;RESULT:0;AVSZIP:Y;IAVS:N;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This shows that we have a successful payment (&#039;pmt&#039;) from this customer. You may search for the payment in PayFlow via the PNREF ID (&#039;ESYP9EC9E9FF&#039;). You can also see some fraud filter results in this email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;CVV2MATCH:Y&amp;lt;/tt&amp;gt; cvv matches (Y=match, N=no match, X=not supported by bank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;AVSADDR:Y&amp;lt;/tt&amp;gt; address verification matches (Y=match, N=zip match, X=not supported)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;PROCCVV2:M&amp;lt;/tt&amp;gt; verbose cvv match info (S=not supported, U=unavailable, W=whole zip, X=exact match, Y=yes, Z=zip)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;PROCAVS:Y&amp;lt;/tt&amp;gt; verbose address verification info (M=match, N=no match, P=not processed, S=not supported, U=unavailable, X=no response)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action to take&#039;&#039;&#039;: Clear arrears for customer. Delete email.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;successful S for 68479f46&amp;quot; ==&lt;br /&gt;
This means a new customer paid via cc. &#039;&#039;&#039;S&#039;&#039;&#039; means we collected $. &#039;&#039;&#039;A&#039;&#039;&#039; means it&#039;s only an auth (in the case of a colo) and we will need to collect funds later.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action to take&#039;&#039;&#039;: rename the cc info file (see [[#.22New_ccard_order_68479f46.22|New ccard order 68479f46]]). Delete email&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;New ccard order 68479f46&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
From: Chad Whitacre&lt;br /&gt;
gpg --decrypt /usr/local/www/ccard_orders/done/43b7214f&lt;br /&gt;
&lt;br /&gt;
-----BEGIN PGP MESSAGE-----&lt;br /&gt;
Version: Crypt::OpenPGP 1.03&lt;br /&gt;
&lt;br /&gt;
hQEOA/J4/DszoRXaEAQAiNS5gAlrM0XQLMvUnJvq8GWQUptOZvXbIInoCYlWUrMG&lt;br /&gt;
ZMLoIuNLua6IlBjV2yJg+r0f8jhsMfsiD+kIZq7xo8sEVfSXaKtGNsi1K8KejUYh&lt;br /&gt;
ZKclJh4DULOeTRiumg0rsgbvldgs7JlHa/WfyawJjhD4oV8YJy5c6KyDic4hFmoD&lt;br /&gt;
/jmsi60I8bfkgMQ+5SRM8FcMKL4evuheRLvvFbI4f8SoOzR+LsQPsn+hfTsC/Qp8&lt;br /&gt;
X2YjCp6w2Oyxz5TZE4SMeVOP70aR1RK7dhr2NQPTr6pFNM3b3zGIgSx8AEs8pgsy&lt;br /&gt;
Yv+cVEjV/iUv+lFpBxqqoid53YNTx9pP+kPMjLLKJk6b0sAdAbxG68FtgnBybMui&lt;br /&gt;
gMbf92ji+IR87q0D16/nPjzsAv3s7zRw/nzZIOlgQ1/GAFEF7VSyQHzOkd9UQuS0&lt;br /&gt;
kU0XXrUpVi0v0PGc9nMWjBA5d2YsaqDrZRxFgzCqwBmhxMHAQqQMzfaEyQIL4EF0&lt;br /&gt;
LUpVe4cWiI3aSjPx0aC7bFrioqqXl8vJNfiFMgt1gY6J1PQ4S/wRgmLDNcJrejAA&lt;br /&gt;
483biJUsDF4S02JK3QLbUcYN/2NJE2M0/cO88DXXZvm6B7jc0URMN5ytYrv3SYHu&lt;br /&gt;
VGuNRCbdaicekD6VnF9EkUA=&lt;br /&gt;
=zKlm&lt;br /&gt;
-----END PGP MESSAGE-----&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the encrypted cc info. It&#039;s viewable in the email and placed in a file (&amp;lt;tt&amp;gt;/usr/local/www/ccard_orders/done/43b7214f&amp;lt;/tt&amp;gt;) on mail. It needs to be renamed to the customer&#039;s final CID:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;mv /usr/local/www/ccard_orders/done/43b7214f /usr/local/www/ccard_orders/done/col0NNNN.gpg&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file can be decrypted (gpg --decrypt /path/to/file) to get at the info.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action to take&#039;&#039;&#039;: rename the file. Delete email.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;failed pmt for col01111&amp;quot; ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RESPMSG:Duplicate trans: 10536-The transaction was refused as a result of a duplicate&lt;br /&gt;
invoice ID supplied.  Attempt with a new invoice&lt;br /&gt;
ID;PNREF:ETHPA078CA93;RESULT:30;X-VPS-REQUEST-ID:1349657543Scol01034;HOSTCODE:10536;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pretty self explanatory. Their payment failed, and they do know about it. This is sent to us so we know it happened, in case (in the case above) the fault was our own. Most of the time the reason will be a plain old DECLINE. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action to take&#039;&#039;&#039;: None, unless the fault is our own. The customer should go back to the payment page and try to pay again. Delete email.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Unknown IPN type:&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;payer_email =&amp;gt; lenderreviews@gmail.com&lt;br /&gt;
first_name =&amp;gt; Randall&lt;br /&gt;
item_number =&amp;gt; 0003&lt;br /&gt;
payment_gross =&amp;gt; -39.00&lt;br /&gt;
mc_currency =&amp;gt; USD&lt;br /&gt;
receiver_id =&amp;gt; 8EKTVPV9MKWF4&lt;br /&gt;
ipn_track_id =&amp;gt; 15729a938d26a&lt;br /&gt;
invoice =&amp;gt; a9ca993f&lt;br /&gt;
subscr_id =&amp;gt; S-5SK10643PA3743414&lt;br /&gt;
reason_code =&amp;gt; other&lt;br /&gt;
business =&amp;gt; payments@johncompanies.com&lt;br /&gt;
charset =&amp;gt; windows-1252&lt;br /&gt;
mc_gross =&amp;gt; -39.00&lt;br /&gt;
custom =&amp;gt; type=pp&lt;br /&gt;
last_name =&amp;gt; Marquis&lt;br /&gt;
notify_version =&amp;gt; 3.7&lt;br /&gt;
payer_id =&amp;gt; 9VGJXDXGDW2GC&lt;br /&gt;
residence_country =&amp;gt; US&lt;br /&gt;
mc_fee =&amp;gt; -0.74&lt;br /&gt;
payer_business_name =&amp;gt; Lender Reviews, LLC&lt;br /&gt;
txn_id =&amp;gt; 0N451285L6563193U&lt;br /&gt;
cmd =&amp;gt; _notify-validate&lt;br /&gt;
verify_sign =&amp;gt; AhWl7ACVsSRPc7TyALD6xAJDmOYcAWCn9nISbtkuorhGfhawdKvf6fsV&lt;br /&gt;
parent_txn_id =&amp;gt; 4SC12038JA710930G&lt;br /&gt;
receiver_email =&amp;gt; payments@johncompanies.com&lt;br /&gt;
item_name =&amp;gt; JohnCompanies.com Colocation - $39.00/1 month(s)&lt;br /&gt;
payment_status =&amp;gt; Reversed&lt;br /&gt;
protection_eligibility =&amp;gt; Ineligible&lt;br /&gt;
payment_date =&amp;gt; 12:02:18 Sep 26, 2012 PDT&lt;br /&gt;
payment_fee =&amp;gt; -0.74&lt;br /&gt;
transaction_subject =&amp;gt;&lt;br /&gt;
payment_type =&amp;gt; instant&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paypal sends us notifications (IPN) for everything that happens with our Paypal account. Most of these IPNs are quietly handled by our billing system. Occasionally, something happens that our billing system doesn&#039;t recognize or our billing system wasn&#039;t made/meant to handle so it sends this email to let you decide what to do.&lt;br /&gt;
&lt;br /&gt;
Looking through the parameters we see that this was a funds reversal: &amp;lt;tt&amp;gt;payment_status =&amp;gt; Reversed&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can login to paypal and get more info about this by [https://history.paypal.com/us/cgi-bin/webscr?cmd=_history-search searching] on one of several items:&amp;lt;br /&amp;gt;&lt;br /&gt;
payer email: &amp;lt;tt&amp;gt;lenderreviews@gmail.com&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
transaction ID: &amp;lt;tt&amp;gt;0N451285L6563193U&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
subscription ID: &amp;lt;tt&amp;gt;S-5SK10643PA3743414&amp;lt;/tt&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action to take:&#039;&#039;&#039; customer needs to be re-invoiced and likely the sub was cancelled as well.&lt;br /&gt;
&lt;br /&gt;
= Cancelled PayPal Subs =&lt;br /&gt;
When a customer cancels their sub we will get a notice about it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
From: support@johncompanies.com&lt;br /&gt;
To: support@johncompanies.com&lt;br /&gt;
Subject: Subscription cancelled for S-9X6247331K616642Y&lt;br /&gt;
&lt;br /&gt;
mc_amount1 =&amp;gt; 189.00&lt;br /&gt;
mc_amount3 =&amp;gt; 189.00&lt;br /&gt;
payer_email =&amp;gt; kpsurplusdotcom@gmail.com&lt;br /&gt;
first_name =&amp;gt; Ken&lt;br /&gt;
item_number =&amp;gt; 0003&lt;br /&gt;
txn_type =&amp;gt; subscr_cancel&lt;br /&gt;
mc_currency =&amp;gt; USD&lt;br /&gt;
payer_status =&amp;gt; verified&lt;br /&gt;
ipn_track_id =&amp;gt; 48ead05d235f3&lt;br /&gt;
invoice =&amp;gt; 71b20c79&lt;br /&gt;
reattempt =&amp;gt; 1&lt;br /&gt;
subscr_id =&amp;gt; S-9X6247331K616642Y&lt;br /&gt;
recurring =&amp;gt; 1&lt;br /&gt;
business =&amp;gt; payments@johncompanies.com&lt;br /&gt;
charset =&amp;gt; windows-1252&lt;br /&gt;
custom =&amp;gt; type=pp&lt;br /&gt;
last_name =&amp;gt; Parris&lt;br /&gt;
notify_version =&amp;gt; 3.7&lt;br /&gt;
period1 =&amp;gt; 19 D&lt;br /&gt;
period3 =&amp;gt; 1 M&lt;br /&gt;
payer_id =&amp;gt; RMV4JADWCFYJW&lt;br /&gt;
residence_country =&amp;gt; US&lt;br /&gt;
amount1 =&amp;gt; 189.00&lt;br /&gt;
subscr_date =&amp;gt; 03:08:14 Oct 09, 2012 PDT&lt;br /&gt;
payer_business_name =&amp;gt; KP&#039;s Surplus&lt;br /&gt;
amount3 =&amp;gt; 189.00&lt;br /&gt;
cmd =&amp;gt; _notify-validate&lt;br /&gt;
verify_sign =&amp;gt; Aoq5NOCTR258UimYDF1inxShI0akA-Ayb5I4ZayCGz8enxz3aUwfLv5c&lt;br /&gt;
receiver_email =&amp;gt; payments@johncompanies.com&lt;br /&gt;
item_name =&amp;gt; JohnCompanies.com Colocation - $189.00/1 month(s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A sub gets canceled for one of a few reasons:&lt;br /&gt;
# the customer took action to cancel it&lt;br /&gt;
# the customer&#039;s funding source(s) failed to provide funds to pay the subscription amount&lt;br /&gt;
# paypal sometimes cancels these for their own reasons&lt;br /&gt;
# the sub may have been setup (incorrectly) to make only a certain number of payments, then it auto-cancels&lt;br /&gt;
&lt;br /&gt;
The following is all DEPRECATED. As of 20130301 we now simply refer people to the payments page and they pay whatever their balance due is.&lt;br /&gt;
&lt;br /&gt;
Either way, if we take no action, then the customer will no longer be making payments for their service(s). So we need to take action to get them paying again. To get them paying again via subscription, we send them a payment reminder (invoice).&lt;br /&gt;
&lt;br /&gt;
# search for the customer in management by the subID (&amp;lt;tt&amp;gt;S-9X6247331K616642Y&amp;lt;/tt&amp;gt;) or payer&#039;s email (&amp;lt;tt&amp;gt;kpsurplusdotcom@gmail.com&amp;lt;/tt&amp;gt;)&lt;br /&gt;
# take note of the last payment date for the sub and the nature of the sub payments: how much and how often. &lt;br /&gt;
# click the &#039;re-invoice&#039; link associated with the failed sub, this takes you to the Invoice Generator. It will be pre-filled with some &#039;&#039;assumptions&#039;&#039; based on the last payment date and their payment.&lt;br /&gt;
# confirm the payment, start date and interval. The Generator assumes monthly billing in all cases. So if they were paying annually, you will need to correct it. If the sub has been cancelled because paypal was unable to collect funds from their payment sources (most common reason) then the payment due date will have passed. In that case you will see a single amount due now (Single Amount), and the regular (monthly/annual) payment will show up in the &#039;Recurring Bill&#039; field along with the next regular payment date- it will try to preserve their former monthly payment date. Again, if this is an annual payment it will guess wrong and the values will be incorrect so you must fix them and chose &amp;quot;bill every 12 months&amp;quot; too. &lt;br /&gt;
# in most cases we will allow the Invoice Generator to send out an invoice to the customer, so choose &amp;quot;yes, ...&amp;quot; in the &#039;Email invoice to customer?&#039; field. The Generator will offer up some stock message formats. In the case of a sub cancelled with a missed payment, it will auto choose &amp;quot;last payment failed&amp;quot; and fill out the body appropriately. In the case of a sub cancelled, but no payment missed, you should make sure the message selected it &amp;quot;sub cxld&amp;quot;. Depending on the message, it will prompt you to provide different fields (like &amp;quot;Amt of missed pmt&amp;quot;) which it will insert into the message for you. Bottom line- you can write or use whatever message makes sense, just make sure the message includes the link to payment (which is provided just above). &lt;br /&gt;
# select the contacts you want to receive the message- usually just the billing contacts. You may also enter more (comma-delimited)&lt;br /&gt;
# in the &#039;Notifications&#039; section you notice that support@ is auto-selected to receive notification when the bill is paid. This simply means when the customer pays, the corresponding address will be sent an email indicating the invoice was paid.&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1148</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1148"/>
		<updated>2013-03-25T02:42:48Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* mediawiki setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
(build apache module)&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/lang/php5-extensions&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
DocumentRoot &amp;quot;/usr/local/www/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.ph(p3?|tml)$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.phps$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php-source&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    # To re-enable php in user directories comment the following lines&lt;br /&gt;
    # (from &amp;lt;IfModule ...&amp;gt; to &amp;lt;/IfModule&amp;gt;.) Do NOT set it to On as it&lt;br /&gt;
    # prevents .htaccess files from disabling it.&lt;br /&gt;
    &amp;lt;IfModule mod_userdir.c&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /home/*/public_html&amp;gt;&lt;br /&gt;
            php_admin_value engine Off&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                DirectoryIndex index.php&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog /var/log/httpd-error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog /var/log/httpd-access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mkdir ssl&lt;br /&gt;
cd ssl&lt;br /&gt;
&lt;br /&gt;
openssl req -days 1999 -new -x509 -nodes -out server.crt -keyout server.key&lt;br /&gt;
US&lt;br /&gt;
CA&lt;br /&gt;
San Diego&lt;br /&gt;
johncompanies.com&lt;br /&gt;
johncompanies.com&lt;br /&gt;
wiki.johncompanies.com&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/www/wiki/.htaccess&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthUserFile /usr/local/etc/apache22/wiki.passwd&lt;br /&gt;
AuthName wiki&lt;br /&gt;
require valid-user&lt;br /&gt;
satisfy any&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/etc/apache22&lt;br /&gt;
htpasswd -c wiki.passwd admin&lt;br /&gt;
&lt;br /&gt;
https://69.55.229.8/index.php&lt;br /&gt;
&lt;br /&gt;
use mysql (innodb)&lt;br /&gt;
wiki name: JCWiki&lt;br /&gt;
Support / (mail pass) / support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/www/wiki/LocalSettings.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
# This file was automatically generated by the MediaWiki 1.19.2&lt;br /&gt;
# installer. If you make manual changes, please keep track in case you&lt;br /&gt;
# need to recreate them later.&lt;br /&gt;
#&lt;br /&gt;
# See includes/DefaultSettings.php for all configurable settings&lt;br /&gt;
# and their default values, but don&#039;t forget to make changes in _this_&lt;br /&gt;
# file, not there.&lt;br /&gt;
#&lt;br /&gt;
# Further documentation for configuration settings may be found at:&lt;br /&gt;
# http://www.mediawiki.org/wiki/Manual:Configuration_settings&lt;br /&gt;
&lt;br /&gt;
# Protect against web entry&lt;br /&gt;
if ( !defined( &#039;MEDIAWIKI&#039; ) ) {&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
## Uncomment this to disable output compression&lt;br /&gt;
# $wgDisableOutputCompression = true;&lt;br /&gt;
&lt;br /&gt;
$wgSitename      = &amp;quot;JCWiki&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The URL base path to the directory containing the wiki;&lt;br /&gt;
## defaults for all runtime URL paths are based off of this.&lt;br /&gt;
## For more information on customizing the URLs please see:&lt;br /&gt;
## http://www.mediawiki.org/wiki/Manual:Short_URL&lt;br /&gt;
$wgScriptPath       = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgScriptExtension  = &amp;quot;.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The protocol and server name to use in fully-qualified URLs&lt;br /&gt;
$wgServer           = &amp;quot;https://69.55.229.8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The relative URL path to the skins directory&lt;br /&gt;
$wgStylePath        = &amp;quot;$wgScriptPath/skins&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The relative URL path to the logo.  Make sure you change this from the default,&lt;br /&gt;
## or else you&#039;ll overwrite your logo when you upgrade!&lt;br /&gt;
#$wgLogo             = &amp;quot;$wgStylePath/common/images/wiki.png&amp;quot;;&lt;br /&gt;
$wgLogo             = &amp;quot;$wgStylePath/common/images/jclogo.gif&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## UPO means: this is also a user preference option&lt;br /&gt;
&lt;br /&gt;
$wgEnableEmail      = true;&lt;br /&gt;
$wgEnableUserEmail  = true; # UPO&lt;br /&gt;
&lt;br /&gt;
$wgEmergencyContact = &amp;quot;apache@69.55.229.8&amp;quot;;&lt;br /&gt;
$wgPasswordSender   = &amp;quot;apache@69.55.229.8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgEnotifUserTalk      = false; # UPO&lt;br /&gt;
$wgEnotifWatchlist     = false; # UPO&lt;br /&gt;
$wgEmailAuthentication = true;&lt;br /&gt;
&lt;br /&gt;
## Database settings&lt;br /&gt;
$wgDBtype           = &amp;quot;mysql&amp;quot;;&lt;br /&gt;
$wgDBserver         = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
$wgDBname           = &amp;quot;my_wiki&amp;quot;;&lt;br /&gt;
$wgDBuser           = &amp;quot;root&amp;quot;;&lt;br /&gt;
$wgDBpassword       = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# MySQL specific settings&lt;br /&gt;
$wgDBprefix         = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# MySQL table options to use during installation or update&lt;br /&gt;
$wgDBTableOptions   = &amp;quot;ENGINE=InnoDB, DEFAULT CHARSET=binary&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Experimental charset support for MySQL 5.0.&lt;br /&gt;
$wgDBmysql5 = false;&lt;br /&gt;
&lt;br /&gt;
## Shared memory settings&lt;br /&gt;
$wgMainCacheType    = CACHE_NONE;&lt;br /&gt;
$wgMemCachedServers = array();&lt;br /&gt;
&lt;br /&gt;
## To enable image uploads, make sure the &#039;images&#039; directory&lt;br /&gt;
## is writable, then set this to true:&lt;br /&gt;
$wgEnableUploads  = false;&lt;br /&gt;
#$wgUseImageMagick = true;&lt;br /&gt;
#$wgImageMagickConvertCommand = &amp;quot;/usr/bin/convert&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# InstantCommons allows wiki to use images from http://commons.wikimedia.org&lt;br /&gt;
$wgUseInstantCommons  = false;&lt;br /&gt;
&lt;br /&gt;
## If you use ImageMagick (or any other shell command) on a&lt;br /&gt;
## Linux server, this will need to be set to the name of an&lt;br /&gt;
## available UTF-8 locale&lt;br /&gt;
$wgShellLocale = &amp;quot;en_US.utf8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## If you want to use image uploads under safe mode,&lt;br /&gt;
## create the directories images/archive, images/thumb and&lt;br /&gt;
## images/temp, and make them all writable. Then uncomment&lt;br /&gt;
## this, if it&#039;s not already uncommented:&lt;br /&gt;
#$wgHashedUploadDirectory = false;&lt;br /&gt;
&lt;br /&gt;
## Set $wgCacheDirectory to a writable directory on the web server&lt;br /&gt;
## to make your wiki go slightly faster. The directory should not&lt;br /&gt;
## be publically accessible from the web.&lt;br /&gt;
#$wgCacheDirectory = &amp;quot;$IP/cache&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Site language code, should be one of the list in ./languages/Names.php&lt;br /&gt;
$wgLanguageCode = &amp;quot;en&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgSecretKey = &amp;quot;abc699ef26890b49b4055430f8ebbd25e84cce21a7e53aeaec4d4313af4c9739&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Site upgrade key. Must be set to a string (default provided) to turn on the&lt;br /&gt;
# web installer while LocalSettings.php is in place&lt;br /&gt;
$wgUpgradeKey = &amp;quot;3196710f4a7d7332&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## Default skin: you can change the default skin. Use the internal symbolic&lt;br /&gt;
## names, ie &#039;standard&#039;, &#039;nostalgia&#039;, &#039;cologneblue&#039;, &#039;monobook&#039;, &#039;vector&#039;:&lt;br /&gt;
$wgDefaultSkin = &amp;quot;vector&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## For attaching licensing metadata to pages, and displaying an&lt;br /&gt;
## appropriate copyright notice / icon. GNU Free Documentation&lt;br /&gt;
## License and Creative Commons licenses are supported so far.&lt;br /&gt;
$wgRightsPage = &amp;quot;&amp;quot;; # Set to the title of a wiki page that describes your license/copyright&lt;br /&gt;
$wgRightsUrl  = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgRightsText = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgRightsIcon = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Path to the GNU diff3 utility. Used for conflict resolution.&lt;br /&gt;
$wgDiff3 = &amp;quot;/usr/bin/diff3&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Query string length limit for ResourceLoader. You should only set this if&lt;br /&gt;
# your web server has a query string length limit (then set it to that limit),&lt;br /&gt;
# or if you have suhosin.get.max_value_length set in php.ini (then set it to&lt;br /&gt;
# that value)&lt;br /&gt;
$wgResourceLoaderMaxQueryLength = -1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# End of automatically generated settings.&lt;br /&gt;
# Add more configuration options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== copy/backup wiki ==&lt;br /&gt;
on main/primary wiki:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
ssh 69.55.230.18 &amp;quot;/etc/init.d/mysql stop&amp;quot;&lt;br /&gt;
rsync -av /var/db/mysql/my_wiki/ 69.55.230.18:/var/lib/mysql/my_wiki/&lt;br /&gt;
rsync -av /var/db/mysql/ib* 69.55.230.18:/var/lib/mysql/&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
ssh 69.55.230.18 &amp;quot;/etc/init.d/mysql start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1147</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1147"/>
		<updated>2013-03-25T02:39:53Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* mediawiki setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
(build apache module)&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/lang/php5-extensions&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
DocumentRoot &amp;quot;/usr/local/www/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.ph(p3?|tml)$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.phps$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php-source&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    # To re-enable php in user directories comment the following lines&lt;br /&gt;
    # (from &amp;lt;IfModule ...&amp;gt; to &amp;lt;/IfModule&amp;gt;.) Do NOT set it to On as it&lt;br /&gt;
    # prevents .htaccess files from disabling it.&lt;br /&gt;
    &amp;lt;IfModule mod_userdir.c&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /home/*/public_html&amp;gt;&lt;br /&gt;
            php_admin_value engine Off&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                DirectoryIndex index.php&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog /var/log/httpd-error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog /var/log/httpd-access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mkdir ssl&lt;br /&gt;
cd ssl&lt;br /&gt;
&lt;br /&gt;
openssl req -days 1999 -new -x509 -nodes -out server.crt -keyout server.key&lt;br /&gt;
US&lt;br /&gt;
CA&lt;br /&gt;
San Diego&lt;br /&gt;
johncompanies.com&lt;br /&gt;
johncompanies.com&lt;br /&gt;
wiki.johncompanies.com&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/www/wiki/.htaccess&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthUserFile /usr/local/etc/apache22/wiki.passwd&lt;br /&gt;
AuthName wiki&lt;br /&gt;
require valid-user&lt;br /&gt;
satisfy any&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/etc/apache22&lt;br /&gt;
htpasswd -c wiki.passwd admin&lt;br /&gt;
&lt;br /&gt;
https://69.55.229.8/index.php&lt;br /&gt;
&lt;br /&gt;
use mysql (innodb)&lt;br /&gt;
wiki name: JCWiki&lt;br /&gt;
Support / (mail pass) / support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat /usr/local/www/wiki/LocalSettings.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
# This file was automatically generated by the MediaWiki 1.19.2&lt;br /&gt;
# installer. If you make manual changes, please keep track in case you&lt;br /&gt;
# need to recreate them later.&lt;br /&gt;
#&lt;br /&gt;
# See includes/DefaultSettings.php for all configurable settings&lt;br /&gt;
# and their default values, but don&#039;t forget to make changes in _this_&lt;br /&gt;
# file, not there.&lt;br /&gt;
#&lt;br /&gt;
# Further documentation for configuration settings may be found at:&lt;br /&gt;
# http://www.mediawiki.org/wiki/Manual:Configuration_settings&lt;br /&gt;
&lt;br /&gt;
# Protect against web entry&lt;br /&gt;
if ( !defined( &#039;MEDIAWIKI&#039; ) ) {&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
## Uncomment this to disable output compression&lt;br /&gt;
# $wgDisableOutputCompression = true;&lt;br /&gt;
&lt;br /&gt;
$wgSitename      = &amp;quot;JCWiki&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The URL base path to the directory containing the wiki;&lt;br /&gt;
## defaults for all runtime URL paths are based off of this.&lt;br /&gt;
## For more information on customizing the URLs please see:&lt;br /&gt;
## http://www.mediawiki.org/wiki/Manual:Short_URL&lt;br /&gt;
$wgScriptPath       = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgScriptExtension  = &amp;quot;.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The protocol and server name to use in fully-qualified URLs&lt;br /&gt;
$wgServer           = &amp;quot;https://69.55.229.8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The relative URL path to the skins directory&lt;br /&gt;
$wgStylePath        = &amp;quot;$wgScriptPath/skins&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The relative URL path to the logo.  Make sure you change this from the default,&lt;br /&gt;
## or else you&#039;ll overwrite your logo when you upgrade!&lt;br /&gt;
#$wgLogo             = &amp;quot;$wgStylePath/common/images/wiki.png&amp;quot;;&lt;br /&gt;
$wgLogo             = &amp;quot;$wgStylePath/common/images/jclogo.gif&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## UPO means: this is also a user preference option&lt;br /&gt;
&lt;br /&gt;
$wgEnableEmail      = true;&lt;br /&gt;
$wgEnableUserEmail  = true; # UPO&lt;br /&gt;
&lt;br /&gt;
$wgEmergencyContact = &amp;quot;apache@69.55.229.8&amp;quot;;&lt;br /&gt;
$wgPasswordSender   = &amp;quot;apache@69.55.229.8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgEnotifUserTalk      = false; # UPO&lt;br /&gt;
$wgEnotifWatchlist     = false; # UPO&lt;br /&gt;
$wgEmailAuthentication = true;&lt;br /&gt;
&lt;br /&gt;
## Database settings&lt;br /&gt;
$wgDBtype           = &amp;quot;mysql&amp;quot;;&lt;br /&gt;
$wgDBserver         = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
$wgDBname           = &amp;quot;my_wiki&amp;quot;;&lt;br /&gt;
$wgDBuser           = &amp;quot;root&amp;quot;;&lt;br /&gt;
$wgDBpassword       = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# MySQL specific settings&lt;br /&gt;
$wgDBprefix         = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# MySQL table options to use during installation or update&lt;br /&gt;
$wgDBTableOptions   = &amp;quot;ENGINE=InnoDB, DEFAULT CHARSET=binary&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Experimental charset support for MySQL 5.0.&lt;br /&gt;
$wgDBmysql5 = false;&lt;br /&gt;
&lt;br /&gt;
## Shared memory settings&lt;br /&gt;
$wgMainCacheType    = CACHE_NONE;&lt;br /&gt;
$wgMemCachedServers = array();&lt;br /&gt;
&lt;br /&gt;
## To enable image uploads, make sure the &#039;images&#039; directory&lt;br /&gt;
## is writable, then set this to true:&lt;br /&gt;
$wgEnableUploads  = false;&lt;br /&gt;
#$wgUseImageMagick = true;&lt;br /&gt;
#$wgImageMagickConvertCommand = &amp;quot;/usr/bin/convert&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# InstantCommons allows wiki to use images from http://commons.wikimedia.org&lt;br /&gt;
$wgUseInstantCommons  = false;&lt;br /&gt;
&lt;br /&gt;
## If you use ImageMagick (or any other shell command) on a&lt;br /&gt;
## Linux server, this will need to be set to the name of an&lt;br /&gt;
## available UTF-8 locale&lt;br /&gt;
$wgShellLocale = &amp;quot;en_US.utf8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## If you want to use image uploads under safe mode,&lt;br /&gt;
## create the directories images/archive, images/thumb and&lt;br /&gt;
## images/temp, and make them all writable. Then uncomment&lt;br /&gt;
## this, if it&#039;s not already uncommented:&lt;br /&gt;
#$wgHashedUploadDirectory = false;&lt;br /&gt;
&lt;br /&gt;
## Set $wgCacheDirectory to a writable directory on the web server&lt;br /&gt;
## to make your wiki go slightly faster. The directory should not&lt;br /&gt;
## be publically accessible from the web.&lt;br /&gt;
#$wgCacheDirectory = &amp;quot;$IP/cache&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Site language code, should be one of the list in ./languages/Names.php&lt;br /&gt;
$wgLanguageCode = &amp;quot;en&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgSecretKey = &amp;quot;abc699ef26890b49b4055430f8ebbd25e84cce21a7e53aeaec4d4313af4c9739&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Site upgrade key. Must be set to a string (default provided) to turn on the&lt;br /&gt;
# web installer while LocalSettings.php is in place&lt;br /&gt;
$wgUpgradeKey = &amp;quot;3196710f4a7d7332&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## Default skin: you can change the default skin. Use the internal symbolic&lt;br /&gt;
## names, ie &#039;standard&#039;, &#039;nostalgia&#039;, &#039;cologneblue&#039;, &#039;monobook&#039;, &#039;vector&#039;:&lt;br /&gt;
$wgDefaultSkin = &amp;quot;vector&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## For attaching licensing metadata to pages, and displaying an&lt;br /&gt;
## appropriate copyright notice / icon. GNU Free Documentation&lt;br /&gt;
## License and Creative Commons licenses are supported so far.&lt;br /&gt;
$wgRightsPage = &amp;quot;&amp;quot;; # Set to the title of a wiki page that describes your license/copyright&lt;br /&gt;
$wgRightsUrl  = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgRightsText = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgRightsIcon = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Path to the GNU diff3 utility. Used for conflict resolution.&lt;br /&gt;
$wgDiff3 = &amp;quot;/usr/bin/diff3&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Query string length limit for ResourceLoader. You should only set this if&lt;br /&gt;
# your web server has a query string length limit (then set it to that limit),&lt;br /&gt;
# or if you have suhosin.get.max_value_length set in php.ini (then set it to&lt;br /&gt;
# that value)&lt;br /&gt;
$wgResourceLoaderMaxQueryLength = -1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# End of automatically generated settings.&lt;br /&gt;
# Add more configuration options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== copy/backup wiki ==&lt;br /&gt;
on main/primary wiki:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
ssh 69.55.230.18 &amp;quot;/etc/init.d/mysql stop&amp;quot;&lt;br /&gt;
rsync -av /var/db/mysql/my_wiki/ 69.55.230.18:/var/lib/mysql/my_wiki/&lt;br /&gt;
rsync -av /var/db/mysql/ib* 69.55.230.18:/var/lib/mysql/&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
ssh 69.55.230.18 &amp;quot;/etc/init.d/mysql start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1146</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1146"/>
		<updated>2013-03-25T02:30:44Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* mediawiki setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
(build apache module)&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/lang/php5-extensions&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
DocumentRoot &amp;quot;/usr/local/www/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.ph(p3?|tml)$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.phps$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php-source&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    # To re-enable php in user directories comment the following lines&lt;br /&gt;
    # (from &amp;lt;IfModule ...&amp;gt; to &amp;lt;/IfModule&amp;gt;.) Do NOT set it to On as it&lt;br /&gt;
    # prevents .htaccess files from disabling it.&lt;br /&gt;
    &amp;lt;IfModule mod_userdir.c&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /home/*/public_html&amp;gt;&lt;br /&gt;
            php_admin_value engine Off&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                DirectoryIndex index.php&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog /var/log/httpd-error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog /var/log/httpd-access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mkdir ssl&lt;br /&gt;
cd ssl&lt;br /&gt;
&lt;br /&gt;
openssl req -days 1999 -new -x509 -nodes -out server.crt -keyout server.key&lt;br /&gt;
US&lt;br /&gt;
CA&lt;br /&gt;
San Diego&lt;br /&gt;
johncompanies.com&lt;br /&gt;
johncompanies.com&lt;br /&gt;
wiki.johncompanies.com&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/www/wiki/.htaccess&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthUserFile /usr/local/etc/apache22/wiki.passwd&lt;br /&gt;
AuthName wiki&lt;br /&gt;
require valid-user&lt;br /&gt;
satisfy any&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/etc/apache22&lt;br /&gt;
htpasswd -c wiki.passwd admin&lt;br /&gt;
&lt;br /&gt;
https://69.55.229.8/index.php&lt;br /&gt;
&lt;br /&gt;
use mysql (innodb)&lt;br /&gt;
wiki name: JCWiki&lt;br /&gt;
Support / (mail pass) / support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat /usr/local/www/wiki/LocalSettings.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
# This file was automatically generated by the MediaWiki 1.19.2&lt;br /&gt;
# installer. If you make manual changes, please keep track in case you&lt;br /&gt;
# need to recreate them later.&lt;br /&gt;
#&lt;br /&gt;
# See includes/DefaultSettings.php for all configurable settings&lt;br /&gt;
# and their default values, but don&#039;t forget to make changes in _this_&lt;br /&gt;
# file, not there.&lt;br /&gt;
#&lt;br /&gt;
# Further documentation for configuration settings may be found at:&lt;br /&gt;
# http://www.mediawiki.org/wiki/Manual:Configuration_settings&lt;br /&gt;
&lt;br /&gt;
# Protect against web entry&lt;br /&gt;
if ( !defined( &#039;MEDIAWIKI&#039; ) ) {&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
## Uncomment this to disable output compression&lt;br /&gt;
# $wgDisableOutputCompression = true;&lt;br /&gt;
&lt;br /&gt;
$wgSitename      = &amp;quot;JCWiki&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The URL base path to the directory containing the wiki;&lt;br /&gt;
## defaults for all runtime URL paths are based off of this.&lt;br /&gt;
## For more information on customizing the URLs please see:&lt;br /&gt;
## http://www.mediawiki.org/wiki/Manual:Short_URL&lt;br /&gt;
$wgScriptPath       = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgScriptExtension  = &amp;quot;.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The protocol and server name to use in fully-qualified URLs&lt;br /&gt;
$wgServer           = &amp;quot;https://69.55.229.8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The relative URL path to the skins directory&lt;br /&gt;
$wgStylePath        = &amp;quot;$wgScriptPath/skins&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The relative URL path to the logo.  Make sure you change this from the default,&lt;br /&gt;
## or else you&#039;ll overwrite your logo when you upgrade!&lt;br /&gt;
#$wgLogo             = &amp;quot;$wgStylePath/common/images/wiki.png&amp;quot;;&lt;br /&gt;
$wgLogo             = &amp;quot;$wgStylePath/common/images/jclogo.gif&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## UPO means: this is also a user preference option&lt;br /&gt;
&lt;br /&gt;
$wgEnableEmail      = true;&lt;br /&gt;
$wgEnableUserEmail  = true; # UPO&lt;br /&gt;
&lt;br /&gt;
$wgEmergencyContact = &amp;quot;apache@69.55.229.8&amp;quot;;&lt;br /&gt;
$wgPasswordSender   = &amp;quot;apache@69.55.229.8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgEnotifUserTalk      = false; # UPO&lt;br /&gt;
$wgEnotifWatchlist     = false; # UPO&lt;br /&gt;
$wgEmailAuthentication = true;&lt;br /&gt;
&lt;br /&gt;
## Database settings&lt;br /&gt;
$wgDBtype           = &amp;quot;mysql&amp;quot;;&lt;br /&gt;
$wgDBserver         = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
$wgDBname           = &amp;quot;my_wiki&amp;quot;;&lt;br /&gt;
$wgDBuser           = &amp;quot;root&amp;quot;;&lt;br /&gt;
$wgDBpassword       = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# MySQL specific settings&lt;br /&gt;
$wgDBprefix         = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# MySQL table options to use during installation or update&lt;br /&gt;
$wgDBTableOptions   = &amp;quot;ENGINE=InnoDB, DEFAULT CHARSET=binary&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Experimental charset support for MySQL 5.0.&lt;br /&gt;
$wgDBmysql5 = false;&lt;br /&gt;
&lt;br /&gt;
## Shared memory settings&lt;br /&gt;
$wgMainCacheType    = CACHE_NONE;&lt;br /&gt;
$wgMemCachedServers = array();&lt;br /&gt;
&lt;br /&gt;
## To enable image uploads, make sure the &#039;images&#039; directory&lt;br /&gt;
## is writable, then set this to true:&lt;br /&gt;
$wgEnableUploads  = false;&lt;br /&gt;
#$wgUseImageMagick = true;&lt;br /&gt;
#$wgImageMagickConvertCommand = &amp;quot;/usr/bin/convert&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# InstantCommons allows wiki to use images from http://commons.wikimedia.org&lt;br /&gt;
$wgUseInstantCommons  = false;&lt;br /&gt;
&lt;br /&gt;
## If you use ImageMagick (or any other shell command) on a&lt;br /&gt;
## Linux server, this will need to be set to the name of an&lt;br /&gt;
## available UTF-8 locale&lt;br /&gt;
$wgShellLocale = &amp;quot;en_US.utf8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## If you want to use image uploads under safe mode,&lt;br /&gt;
## create the directories images/archive, images/thumb and&lt;br /&gt;
## images/temp, and make them all writable. Then uncomment&lt;br /&gt;
## this, if it&#039;s not already uncommented:&lt;br /&gt;
#$wgHashedUploadDirectory = false;&lt;br /&gt;
&lt;br /&gt;
## Set $wgCacheDirectory to a writable directory on the web server&lt;br /&gt;
## to make your wiki go slightly faster. The directory should not&lt;br /&gt;
## be publically accessible from the web.&lt;br /&gt;
#$wgCacheDirectory = &amp;quot;$IP/cache&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Site language code, should be one of the list in ./languages/Names.php&lt;br /&gt;
$wgLanguageCode = &amp;quot;en&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgSecretKey = &amp;quot;abc699ef26890b49b4055430f8ebbd25e84cce21a7e53aeaec4d4313af4c9739&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Site upgrade key. Must be set to a string (default provided) to turn on the&lt;br /&gt;
# web installer while LocalSettings.php is in place&lt;br /&gt;
$wgUpgradeKey = &amp;quot;3196710f4a7d7332&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## Default skin: you can change the default skin. Use the internal symbolic&lt;br /&gt;
## names, ie &#039;standard&#039;, &#039;nostalgia&#039;, &#039;cologneblue&#039;, &#039;monobook&#039;, &#039;vector&#039;:&lt;br /&gt;
$wgDefaultSkin = &amp;quot;vector&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## For attaching licensing metadata to pages, and displaying an&lt;br /&gt;
## appropriate copyright notice / icon. GNU Free Documentation&lt;br /&gt;
## License and Creative Commons licenses are supported so far.&lt;br /&gt;
$wgRightsPage = &amp;quot;&amp;quot;; # Set to the title of a wiki page that describes your license/copyright&lt;br /&gt;
$wgRightsUrl  = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgRightsText = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgRightsIcon = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Path to the GNU diff3 utility. Used for conflict resolution.&lt;br /&gt;
$wgDiff3 = &amp;quot;/usr/bin/diff3&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Query string length limit for ResourceLoader. You should only set this if&lt;br /&gt;
# your web server has a query string length limit (then set it to that limit),&lt;br /&gt;
# or if you have suhosin.get.max_value_length set in php.ini (then set it to&lt;br /&gt;
# that value)&lt;br /&gt;
$wgResourceLoaderMaxQueryLength = -1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# End of automatically generated settings.&lt;br /&gt;
# Add more configuration options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== copy/backup wiki&lt;br /&gt;
on main/primary wiki:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
ssh 69.55.230.18 &amp;quot;/etc/init.d/mysql stop&amp;quot;&lt;br /&gt;
rsync -av /var/db/mysql/my_wiki/ 69.55.230.18:/var/lib/mysql/my_wiki/&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
ssh 69.55.230.18 &amp;quot;/etc/init.d/mysql start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1145</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1145"/>
		<updated>2013-03-25T02:29:42Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
(build apache module)&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/lang/php5-extensions&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
DocumentRoot &amp;quot;/usr/local/www/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.ph(p3?|tml)$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.phps$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php-source&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    # To re-enable php in user directories comment the following lines&lt;br /&gt;
    # (from &amp;lt;IfModule ...&amp;gt; to &amp;lt;/IfModule&amp;gt;.) Do NOT set it to On as it&lt;br /&gt;
    # prevents .htaccess files from disabling it.&lt;br /&gt;
    &amp;lt;IfModule mod_userdir.c&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /home/*/public_html&amp;gt;&lt;br /&gt;
            php_admin_value engine Off&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                DirectoryIndex index.php&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog /var/log/httpd-error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog /var/log/httpd-access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mkdir ssl&lt;br /&gt;
cd ssl&lt;br /&gt;
&lt;br /&gt;
openssl req -days 1999 -new -x509 -nodes -out server.crt -keyout server.key&lt;br /&gt;
US&lt;br /&gt;
CA&lt;br /&gt;
San Diego&lt;br /&gt;
johncompanies.com&lt;br /&gt;
johncompanies.com&lt;br /&gt;
wiki.johncompanies.com&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/www/wiki/.htaccess&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthUserFile /usr/local/etc/apache22/wiki.passwd&lt;br /&gt;
AuthName wiki&lt;br /&gt;
require valid-user&lt;br /&gt;
satisfy any&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/etc/apache22&lt;br /&gt;
htpasswd -c wiki.passwd admin&lt;br /&gt;
&lt;br /&gt;
https://69.55.229.8/index.php&lt;br /&gt;
&lt;br /&gt;
use mysql (innodb)&lt;br /&gt;
wiki name: JCWiki&lt;br /&gt;
Support / (mail pass) / support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat /usr/local/www/wiki/LocalSettings.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
# This file was automatically generated by the MediaWiki 1.19.2&lt;br /&gt;
# installer. If you make manual changes, please keep track in case you&lt;br /&gt;
# need to recreate them later.&lt;br /&gt;
#&lt;br /&gt;
# See includes/DefaultSettings.php for all configurable settings&lt;br /&gt;
# and their default values, but don&#039;t forget to make changes in _this_&lt;br /&gt;
# file, not there.&lt;br /&gt;
#&lt;br /&gt;
# Further documentation for configuration settings may be found at:&lt;br /&gt;
# http://www.mediawiki.org/wiki/Manual:Configuration_settings&lt;br /&gt;
&lt;br /&gt;
# Protect against web entry&lt;br /&gt;
if ( !defined( &#039;MEDIAWIKI&#039; ) ) {&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
## Uncomment this to disable output compression&lt;br /&gt;
# $wgDisableOutputCompression = true;&lt;br /&gt;
&lt;br /&gt;
$wgSitename      = &amp;quot;JCWiki&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The URL base path to the directory containing the wiki;&lt;br /&gt;
## defaults for all runtime URL paths are based off of this.&lt;br /&gt;
## For more information on customizing the URLs please see:&lt;br /&gt;
## http://www.mediawiki.org/wiki/Manual:Short_URL&lt;br /&gt;
$wgScriptPath       = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgScriptExtension  = &amp;quot;.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The protocol and server name to use in fully-qualified URLs&lt;br /&gt;
$wgServer           = &amp;quot;https://69.55.229.8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The relative URL path to the skins directory&lt;br /&gt;
$wgStylePath        = &amp;quot;$wgScriptPath/skins&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## The relative URL path to the logo.  Make sure you change this from the default,&lt;br /&gt;
## or else you&#039;ll overwrite your logo when you upgrade!&lt;br /&gt;
$wgLogo             = &amp;quot;$wgStylePath/common/images/wiki.png&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## UPO means: this is also a user preference option&lt;br /&gt;
&lt;br /&gt;
$wgEnableEmail      = true;&lt;br /&gt;
$wgEnableUserEmail  = true; # UPO&lt;br /&gt;
&lt;br /&gt;
$wgEmergencyContact = &amp;quot;apache@69.55.229.8&amp;quot;;&lt;br /&gt;
$wgPasswordSender   = &amp;quot;apache@69.55.229.8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgEnotifUserTalk      = false; # UPO&lt;br /&gt;
$wgEnotifWatchlist     = false; # UPO&lt;br /&gt;
$wgEmailAuthentication = true;&lt;br /&gt;
&lt;br /&gt;
## Database settings&lt;br /&gt;
$wgDBtype           = &amp;quot;mysql&amp;quot;;&lt;br /&gt;
$wgDBserver         = &amp;quot;localhost&amp;quot;;&lt;br /&gt;
$wgDBname           = &amp;quot;my_wiki&amp;quot;;&lt;br /&gt;
$wgDBuser           = &amp;quot;root&amp;quot;;&lt;br /&gt;
$wgDBpassword       = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# MySQL specific settings&lt;br /&gt;
$wgDBprefix         = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# MySQL table options to use during installation or update&lt;br /&gt;
$wgDBTableOptions   = &amp;quot;ENGINE=InnoDB, DEFAULT CHARSET=binary&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Experimental charset support for MySQL 5.0.&lt;br /&gt;
$wgDBmysql5 = false;&lt;br /&gt;
&lt;br /&gt;
## Shared memory settings&lt;br /&gt;
$wgMainCacheType    = CACHE_NONE;&lt;br /&gt;
$wgMemCachedServers = array();&lt;br /&gt;
&lt;br /&gt;
## To enable image uploads, make sure the &#039;images&#039; directory&lt;br /&gt;
## is writable, then set this to true:&lt;br /&gt;
$wgEnableUploads  = false;&lt;br /&gt;
#$wgUseImageMagick = true;&lt;br /&gt;
#$wgImageMagickConvertCommand = &amp;quot;/usr/bin/convert&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# InstantCommons allows wiki to use images from http://commons.wikimedia.org&lt;br /&gt;
$wgUseInstantCommons  = false;&lt;br /&gt;
&lt;br /&gt;
## If you use ImageMagick (or any other shell command) on a&lt;br /&gt;
## Linux server, this will need to be set to the name of an&lt;br /&gt;
## available UTF-8 locale&lt;br /&gt;
$wgShellLocale = &amp;quot;en_US.utf8&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## If you want to use image uploads under safe mode,&lt;br /&gt;
## create the directories images/archive, images/thumb and&lt;br /&gt;
## images/temp, and make them all writable. Then uncomment&lt;br /&gt;
## this, if it&#039;s not already uncommented:&lt;br /&gt;
#$wgHashedUploadDirectory = false;&lt;br /&gt;
&lt;br /&gt;
## Set $wgCacheDirectory to a writable directory on the web server&lt;br /&gt;
## to make your wiki go slightly faster. The directory should not&lt;br /&gt;
## be publically accessible from the web.&lt;br /&gt;
#$wgCacheDirectory = &amp;quot;$IP/cache&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Site language code, should be one of the list in ./languages/Names.php&lt;br /&gt;
$wgLanguageCode = &amp;quot;en&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$wgSecretKey = &amp;quot;abc699ef26890b49b4055430f8ebbd25e84cce21a7e53aeaec4d4313af4c9739&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Site upgrade key. Must be set to a string (default provided) to turn on the&lt;br /&gt;
# web installer while LocalSettings.php is in place&lt;br /&gt;
$wgUpgradeKey = &amp;quot;3196710f4a7d7332&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## Default skin: you can change the default skin. Use the internal symbolic&lt;br /&gt;
## names, ie &#039;standard&#039;, &#039;nostalgia&#039;, &#039;cologneblue&#039;, &#039;monobook&#039;, &#039;vector&#039;:&lt;br /&gt;
$wgDefaultSkin = &amp;quot;vector&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
## For attaching licensing metadata to pages, and displaying an&lt;br /&gt;
## appropriate copyright notice / icon. GNU Free Documentation&lt;br /&gt;
## License and Creative Commons licenses are supported so far.&lt;br /&gt;
$wgRightsPage = &amp;quot;&amp;quot;; # Set to the title of a wiki page that describes your license/copyright&lt;br /&gt;
$wgRightsUrl  = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgRightsText = &amp;quot;&amp;quot;;&lt;br /&gt;
$wgRightsIcon = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Path to the GNU diff3 utility. Used for conflict resolution.&lt;br /&gt;
$wgDiff3 = &amp;quot;/usr/bin/diff3&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Query string length limit for ResourceLoader. You should only set this if&lt;br /&gt;
# your web server has a query string length limit (then set it to that limit),&lt;br /&gt;
# or if you have suhosin.get.max_value_length set in php.ini (then set it to&lt;br /&gt;
# that value)&lt;br /&gt;
$wgResourceLoaderMaxQueryLength = -1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# End of automatically generated settings.&lt;br /&gt;
# Add more configuration options below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== copy/backup wiki&lt;br /&gt;
on main/primary wiki:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
ssh 69.55.230.18 &amp;quot;/etc/init.d/mysql stop&amp;quot;&lt;br /&gt;
rsync -av /var/db/mysql/my_wiki/ 69.55.230.18:/var/lib/mysql/my_wiki/&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
ssh 69.55.230.18 &amp;quot;/etc/init.d/mysql start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1144</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1144"/>
		<updated>2013-03-25T00:05:45Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* mediawiki setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
(build apache module)&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/lang/php5-extensions&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
DocumentRoot &amp;quot;/usr/local/www/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.ph(p3?|tml)$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.phps$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php-source&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    # To re-enable php in user directories comment the following lines&lt;br /&gt;
    # (from &amp;lt;IfModule ...&amp;gt; to &amp;lt;/IfModule&amp;gt;.) Do NOT set it to On as it&lt;br /&gt;
    # prevents .htaccess files from disabling it.&lt;br /&gt;
    &amp;lt;IfModule mod_userdir.c&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /home/*/public_html&amp;gt;&lt;br /&gt;
            php_admin_value engine Off&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                DirectoryIndex index.php&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog /var/log/httpd-error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog /var/log/httpd-access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mkdir ssl&lt;br /&gt;
cd ssl&lt;br /&gt;
&lt;br /&gt;
openssl req -days 1999 -new -x509 -nodes -out server.crt -keyout server.key&lt;br /&gt;
US&lt;br /&gt;
CA&lt;br /&gt;
San Diego&lt;br /&gt;
johncompanies.com&lt;br /&gt;
johncompanies.com&lt;br /&gt;
wiki.johncompanies.com&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/www/wiki/.htaccess&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthUserFile /usr/local/etc/apache22/wiki.passwd&lt;br /&gt;
AuthName wiki&lt;br /&gt;
require valid-user&lt;br /&gt;
satisfy any&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/etc/apache22&lt;br /&gt;
htpasswd -c wiki.passwd admin&lt;br /&gt;
&lt;br /&gt;
https://69.55.229.8/index.php&lt;br /&gt;
&lt;br /&gt;
use mysql (innodb)&lt;br /&gt;
wiki name: JCWiki&lt;br /&gt;
Support / (mail pass) / support@johncompanies.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1143</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1143"/>
		<updated>2013-03-24T23:50:20Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* mediawiki setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
(build apache module)&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/lang/php5-extensions&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
DocumentRoot &amp;quot;/usr/local/www/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.ph(p3?|tml)$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.phps$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php-source&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    # To re-enable php in user directories comment the following lines&lt;br /&gt;
    # (from &amp;lt;IfModule ...&amp;gt; to &amp;lt;/IfModule&amp;gt;.) Do NOT set it to On as it&lt;br /&gt;
    # prevents .htaccess files from disabling it.&lt;br /&gt;
    &amp;lt;IfModule mod_userdir.c&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /home/*/public_html&amp;gt;&lt;br /&gt;
            php_admin_value engine Off&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                DirectoryIndex index.php&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog /var/log/httpd-error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog /var/log/httpd-access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mkdir ssl&lt;br /&gt;
cd ssl&lt;br /&gt;
&lt;br /&gt;
openssl req -days 1999 -new -x509 -nodes -out server.crt -keyout server.key&lt;br /&gt;
US&lt;br /&gt;
CA&lt;br /&gt;
San Diego&lt;br /&gt;
johncompanies.com&lt;br /&gt;
johncompanies.com&lt;br /&gt;
wiki.johncompanies.com&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/www/wiki/.htaccess&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthUserFile /usr/local/etc/apache22/wiki.passwd&lt;br /&gt;
AuthName wiki&lt;br /&gt;
require valid-user&lt;br /&gt;
satisfy any&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/etc/apache22&lt;br /&gt;
htpasswd -c wiki.passwd admin&lt;br /&gt;
&lt;br /&gt;
https://69.55.229.8/index.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1142</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1142"/>
		<updated>2013-03-24T07:13:16Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* mediawiki setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
(build apache module)&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/lang/php5-extensions&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
DocumentRoot &amp;quot;/usr/local/www/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IfModule mod_php5.c&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.ph(p3?|tml)$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    &amp;lt;FilesMatch &amp;quot;\.phps$&amp;quot;&amp;gt;&lt;br /&gt;
        SetHandler application/x-httpd-php-source&lt;br /&gt;
    &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
    # To re-enable php in user directories comment the following lines&lt;br /&gt;
    # (from &amp;lt;IfModule ...&amp;gt; to &amp;lt;/IfModule&amp;gt;.) Do NOT set it to On as it&lt;br /&gt;
    # prevents .htaccess files from disabling it.&lt;br /&gt;
    &amp;lt;IfModule mod_userdir.c&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /home/*/public_html&amp;gt;&lt;br /&gt;
            php_admin_value engine Off&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
    &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                DirectoryIndex index.php&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog /var/log/httpd-error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog /var/log/httpd-access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mkdir ssl&lt;br /&gt;
cd ssl&lt;br /&gt;
&lt;br /&gt;
openssl req -days 1999 -new -x509 -nodes -out server.crt -keyout server.key&lt;br /&gt;
US&lt;br /&gt;
CA&lt;br /&gt;
San Diego&lt;br /&gt;
johncompanies.com&lt;br /&gt;
johncompanies.com&lt;br /&gt;
wiki.johncompanies.com&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/www/wiki/.htaccess&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthUserFile /usr/local/etc/apache22/wiki.passwd&lt;br /&gt;
AuthName wiki&lt;br /&gt;
require valid-user&lt;br /&gt;
satisfy any&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/etc/apache22&lt;br /&gt;
htpasswd -c wiki.passwd admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1141</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1141"/>
		<updated>2013-03-24T06:50:24Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* mediawiki setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
(build apache module)&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog /var/log/httpd-error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog /var/log/httpd-access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mkdir ssl&lt;br /&gt;
cd ssl&lt;br /&gt;
&lt;br /&gt;
openssl req -days 1999 -new -x509 -nodes -out server.crt -keyout server.key&lt;br /&gt;
US&lt;br /&gt;
CA&lt;br /&gt;
San Diego&lt;br /&gt;
johncompanies.com&lt;br /&gt;
johncompanies.com&lt;br /&gt;
wiki.johncompanies.com&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1140</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1140"/>
		<updated>2013-03-24T06:45:16Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* mediawiki setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog /var/log/httpd-error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog /var/log/httpd-access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mkdir ssl&lt;br /&gt;
cd ssl&lt;br /&gt;
&lt;br /&gt;
openssl req -days 1999 -new -x509 -nodes -out server.crt -keyout server.key&lt;br /&gt;
US&lt;br /&gt;
CA&lt;br /&gt;
San Diego&lt;br /&gt;
johncompanies.com&lt;br /&gt;
johncompanies.com&lt;br /&gt;
wiki.johncompanies.com&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1139</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1139"/>
		<updated>2013-03-24T06:30:04Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* mediawiki setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog /var/log/httpd-error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog /var/log/httpd-access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /usr/local/etc/apache22/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /usr/local/etc/apache22/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mkdir ssl&lt;br /&gt;
cd ssl&lt;br /&gt;
&lt;br /&gt;
openssl req -days 1999 -new -x509 -nodes -out server.crt -keyout server.key&lt;br /&gt;
US&lt;br /&gt;
CA&lt;br /&gt;
San Diego&lt;br /&gt;
johncompanies.com&lt;br /&gt;
johncompanies.com&lt;br /&gt;
wiki.johncompanies.com&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1138</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1138"/>
		<updated>2013-03-24T03:56:53Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Setup jail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki-dir&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki-dir&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki-dir/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki-dir/usr &lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki-dir/dev/&lt;br /&gt;
devfs -m /mnt/data1/wiki-dir/dev rule -s 3 applyset&lt;br /&gt;
jail /mnt/data1/wiki-dir wiki.johncompanies.com 69.55.229.8 /bin/sh /etc/rc&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/wiki.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mediawiki setup ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.mysql.com/archives/mysql-5.5/mysql-5.5.4-m3.tar.gz&lt;br /&gt;
cd /usr/ports/databases/mysql55-server&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/distfiles/&lt;br /&gt;
fetch http://downloads.php.net/johannes/php-5.3.2.tar.bz2&lt;br /&gt;
cd /usr/ports/lang/php52&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/www/apache22&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
cd /usr/local/www/&lt;br /&gt;
fetch http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.2.tar.gz&lt;br /&gt;
tar xzf mediawiki-1.19.2.tar.gz&lt;br /&gt;
mv mediawiki-1.19.2 wiki&lt;br /&gt;
&lt;br /&gt;
vi /usr/local/etc/apache22/httpd.conf&lt;br /&gt;
&lt;br /&gt;
Include etc/apache22/extra/vhost-wiki.conf&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/etc/apache22/extra/vhost-wiki.conf &lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
        ServerAdmin support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
        DocumentRoot /usr/local/www/wiki&lt;br /&gt;
#        &amp;lt;Directory /&amp;gt;&lt;br /&gt;
#                Options FollowSymLinks&lt;br /&gt;
#                AllowOverride None&lt;br /&gt;
#                Order deny,allow&lt;br /&gt;
#        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
        &amp;lt;Directory /usr/local/www/wiki&amp;gt;&lt;br /&gt;
                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;
                Deny from all&lt;br /&gt;
                AllowOverride AuthConfig&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                #Allow from 69.55.233.195&lt;br /&gt;
                #Allow from boody.dyndns.org&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;
        &amp;lt;Directory &amp;quot;/usr/lib/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
                AllowOverride None&lt;br /&gt;
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
&lt;br /&gt;
        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;
        # alert, emerg.&lt;br /&gt;
        LogLevel warn&lt;br /&gt;
&lt;br /&gt;
        CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&lt;br /&gt;
    Alias /doc/ &amp;quot;/usr/share/doc/&amp;quot;&lt;br /&gt;
    &amp;lt;Directory &amp;quot;/usr/share/doc/&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order deny,allow&lt;br /&gt;
        Deny from all&lt;br /&gt;
        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /etc/apache2/ssl/server.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/apache2/ssl/server.key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1137</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1137"/>
		<updated>2013-03-24T00:01:28Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* build */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= wiki =&lt;br /&gt;
&lt;br /&gt;
The wiki (mediawiki) runs on nat2 in a jail running off 69.55.229.8&lt;br /&gt;
&lt;br /&gt;
The backup wiki lives on virt13 in CT 5 / 69.55.230.18&lt;br /&gt;
&lt;br /&gt;
== Setup jail ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /mnt/data1/wiki&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make installworld DESTDIR=/mnt/data1/wiki&lt;br /&gt;
cd etc&lt;br /&gt;
make distribution DESTDIR=/mnt/data1/wiki&lt;br /&gt;
&lt;br /&gt;
mount -t devfs devfs /mnt/data1/wiki/dev&lt;br /&gt;
devfs -m /mnt/data1/wiki/dev rule -s 3 applyset &lt;br /&gt;
&lt;br /&gt;
cd /mnt/data1/wiki&lt;br /&gt;
&lt;br /&gt;
ln -sf dev/null kernel&lt;br /&gt;
&lt;br /&gt;
scp jail9:/usr/local/sbin/jkill /mnt/data1/wiki/sbin&lt;br /&gt;
&lt;br /&gt;
jail /mnt/data1/wiki wiki.johncompanies.com 69.55.229.8 /bin/sh&lt;br /&gt;
csh&lt;br /&gt;
&lt;br /&gt;
touch /etc/fstab&lt;br /&gt;
echo &#039;network_interfaces=&amp;quot;&amp;quot;\&lt;br /&gt;
hostname=&amp;quot;wiki.johncompanies.com&amp;quot;\&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;\&lt;br /&gt;
sendmail_enable=&amp;quot;YES&amp;quot;\&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&#039; &amp;gt; /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;nameserver 69.55.229.3\&lt;br /&gt;
nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf &lt;br /&gt;
&lt;br /&gt;
vi /etc/crontab&lt;br /&gt;
 &lt;br /&gt;
(remove the adjkerntz lines )&lt;br /&gt;
 &lt;br /&gt;
vi /etc/periodic/security/100.chksetuid&lt;br /&gt;
 &lt;br /&gt;
replace: MP=`mount -t ufs | grep -v &amp;quot; nosuid&amp;quot; | awk &#039;{ print $3 }&#039; | sort`&lt;br /&gt;
 with: MP=&#039;/&#039; (use single quotes) &lt;br /&gt;
&lt;br /&gt;
mkdir -p /usr/compat/linux/dev&lt;br /&gt;
 &lt;br /&gt;
adduser&lt;br /&gt;
&lt;br /&gt;
Username: user&lt;br /&gt;
Full name: user&lt;br /&gt;
Uid (Leave empty for default):&lt;br /&gt;
Login group [user]:&lt;br /&gt;
Login group is user. Invite user into other groups? []: wheel&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]:&lt;br /&gt;
Home directory [/home/user]:&lt;br /&gt;
Home directory permissions (Leave empty for default):&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: y&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : user&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : user&lt;br /&gt;
Uid        : 1001&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : user&lt;br /&gt;
Home       : /home/user&lt;br /&gt;
Home Mode  :&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): y&lt;br /&gt;
adduser: INFO: Successfully added (user) to the user database.&lt;br /&gt;
adduser: INFO: Password for (user) is: 901gmYjO&lt;br /&gt;
Add another user? (yes/no): n&lt;br /&gt;
Goodbye! &lt;br /&gt;
&lt;br /&gt;
vi /usr/home/user/.profile &lt;br /&gt;
TERM=vt100;     export TERM&lt;br /&gt;
 &lt;br /&gt;
tzsetup&lt;br /&gt;
 &lt;br /&gt;
newaliases &lt;br /&gt;
 &lt;br /&gt;
rm /sbin/halt /sbin/reboot&lt;br /&gt;
ln /sbin/jkill /sbin/halt&lt;br /&gt;
ln /sbin/jkill /sbin/reboot&lt;br /&gt;
 &lt;br /&gt;
vi /etc/syslog.conf&lt;br /&gt;
#*.err;kern.warning;auth.notice;mail.crit               /dev/console&lt;br /&gt;
*.err;kern.warning;auth.notice;mail.crit                /var/log/messages &lt;br /&gt;
&lt;br /&gt;
exit&lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
cd libexec&lt;br /&gt;
chflags noschg ld-elf32.so.1&lt;br /&gt;
chflags noschg ld-elf.so.1&lt;br /&gt;
mv ld-elf32.so.1 ld-elf32.so.1-orig&lt;br /&gt;
ln ld-elf.so.1 ld-elf32.so.1&lt;br /&gt;
chflags schg ld-elf.so.1&lt;br /&gt;
chflags schg ld-elf32.so.1&lt;br /&gt;
 &lt;br /&gt;
cp -r /usr/ports /mnt/data1/wiki/usr &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1136</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1136"/>
		<updated>2013-03-23T03:50:39Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* virts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
== quar1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt9 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt11 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== virt15 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: CentOS&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Supermicro caase, Intel mobo. 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI megaraid RAID card.&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1135</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1135"/>
		<updated>2013-03-23T03:48:21Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* jail1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.101, Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== jail2 ==&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2950. 6 SATA/SAS drive bays (3 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two  GB (2 x GB) RAID1 arrays running on an LSI-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-&lt;br /&gt;
* OS: FreeBSD  x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4., Pub IP: 69.55.2 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1134</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1134"/>
		<updated>2013-03-23T03:45:33Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* jails */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
== jail1 ==&lt;br /&gt;
&lt;br /&gt;
os: &lt;br /&gt;
disks:&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1133</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=1133"/>
		<updated>2013-03-23T03:45:07Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= jails =&lt;br /&gt;
&lt;br /&gt;
= virts =&lt;br /&gt;
&lt;br /&gt;
= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine (mail) is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
To enable it (on mail, run):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1on.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;~support/tech1off.sh&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or via email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;tech1on@johncompanies.com&lt;br /&gt;
tech1off@johncompanies.com&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 15 13 * * * /usr/local/www/cronjobs/pb_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active paypal billing agreement on file, prepares a paypal batch&lt;br /&gt;
&lt;br /&gt;
 15 14 * * * /usr/local/www/cronjobs/pb_batch_process.pl&lt;br /&gt;
Tries to collect paypal funds for items in paypal batch - communicates with paypal&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
* ntp&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
xntpd_flags=&amp;quot;-A -p /var/run/ntpd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 4096m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.4 mail mail.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
Have bb watch for flow-capture, mysql&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-proctab&lt;br /&gt;
localhost: flow-capture :&lt;br /&gt;
localhost: mysqld :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
server=backup1\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc\&lt;br /&gt;
## ENTRY /usr/home/flowbin\&lt;br /&gt;
## ENTRY /usr/home/database&#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_rotate&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
(Before doing this you may need to take down the firewall and also add to resolv.conf 69.43.143.41)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/net-mgmt/net-snmp&lt;br /&gt;
make install clean&lt;br /&gt;
(defaults)&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_flags=&amp;quot;-a&amp;quot;&lt;br /&gt;
snmpd_conffile=&amp;quot;/usr/local/share/snmp/snmpd.conf&amp;quot;&lt;br /&gt;
snmptrapd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmptrapd_flags=&amp;quot;-a -p /var/run/snmptrapd.pid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/share/snmp/snmpd.conf&lt;br /&gt;
rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We notice that sometimes flow-capture is failing due to swap exhaustion (even after adding more swap). So we crontab flow-capture to restart (it&#039;s ok to start if it&#039;s already running, it just quits):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
#restart flow-capture&lt;br /&gt;
*/15 * * * * /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 8 allow udp from 10.1.4.203 to 10.1.4.203 dst-port 4444&lt;br /&gt;
ipfw add 9 allow udp from 10.1.4.5 to me 161&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup. It will email support@johncompanies.com at it’s conclusion. This email can be deleted, however note when it begins to take significantly longer to complete, ie runs past 2200 pm – this usually indicates a problem on the backup server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Setup raid5 with a boot vol of 12G 5.45tb &lt;br /&gt;
12G boot&lt;br /&gt;
4664 GB &lt;br /&gt;
&lt;br /&gt;
Install ubuntu 8.04&lt;br /&gt;
&lt;br /&gt;
Swap 4G&lt;br /&gt;
&lt;br /&gt;
Don’t format data drive&lt;br /&gt;
&lt;br /&gt;
http://www.unixgods.org/~tilo/linux_larger_2TB.html&lt;br /&gt;
&lt;br /&gt;
parted /dev/sdb&lt;br /&gt;
print&lt;br /&gt;
mklabel gpt&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 4987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start  End  Size  File system  Name  Flags&lt;br /&gt;
&lt;br /&gt;
mkpart primary ext3 0 4987GB&lt;br /&gt;
print&lt;br /&gt;
&lt;br /&gt;
#Disk /dev/sdb: 5987GB&lt;br /&gt;
#Sector size (logical/physical): 512B/512B&lt;br /&gt;
#Partition Table: gpt&lt;br /&gt;
&lt;br /&gt;
#Number  Start   End     Size    File system  Name     Flags&lt;br /&gt;
# 1      17.4kB  4987GB  4987GB               primary&lt;br /&gt;
&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
mkfs.ext3 /dev/sdb1&lt;br /&gt;
#mke2fs 1.40.8 (13-Mar-2008)&lt;br /&gt;
#Filesystem label=&lt;br /&gt;
#OS type: Linux&lt;br /&gt;
#Block size=4096 (log=2)&lt;br /&gt;
#Fragment size=4096 (log=2)&lt;br /&gt;
#304390144 inodes, 1217544183 blocks&lt;br /&gt;
#60877209 blocks (5.00%) reserved for the super user&lt;br /&gt;
#First data block=0&lt;br /&gt;
#Maximum filesystem blocks=0&lt;br /&gt;
#37157 block groups&lt;br /&gt;
#32768 blocks per group, 32768 fragments per group&lt;br /&gt;
#8192 inodes per group&lt;br /&gt;
#Superblock backups stored on blocks:&lt;br /&gt;
#        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,&lt;br /&gt;
#        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,&lt;br /&gt;
#        102400000, 214990848, 512000000, 550731776, 644972544&lt;br /&gt;
#&lt;br /&gt;
#Writing inode tables:   967/37157&lt;br /&gt;
&lt;br /&gt;
mkdir /data&lt;br /&gt;
&lt;br /&gt;
#root@backup1:~# df -h&lt;br /&gt;
#Filesystem            Size  Used Avail Use% Mounted on&lt;br /&gt;
#/dev/sda2             8.3G  540M  7.3G   7% /&lt;br /&gt;
#varrun               1013M   40K 1013M   1% /var/run&lt;br /&gt;
#varlock              1013M     0 1013M   0% /var/lock&lt;br /&gt;
#udev                 1013M   56K 1013M   1% /dev&lt;br /&gt;
#devshm               1013M     0 1013M   0% /dev/shm&lt;br /&gt;
#/dev/sdb1             4.5T  192M  4.3T   1% /data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
vi /etc/ntp.conf&lt;br /&gt;
server 10.1.4.5&lt;br /&gt;
&lt;br /&gt;
scp root@10.1.4.3:/root/.ssh/authorized_keys /root/.ssh/&lt;br /&gt;
cd /root/&lt;br /&gt;
ssh-keygen -t dsa&lt;br /&gt;
echo &amp;quot;10.1.4.3        backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
ssh backup2&lt;br /&gt;
&lt;br /&gt;
vi /root/.bashrc&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;# ttyS0 - getty &lt;br /&gt;
# &lt;br /&gt;
# This service maintains a getty on ttyS0 from the point the system is&lt;br /&gt;
# started until it is shut down again.&lt;br /&gt;
&lt;br /&gt;
start on runlevel 2&lt;br /&gt;
start on runlevel 3&lt;br /&gt;
start on runlevel 4&lt;br /&gt;
start on runlevel 5&lt;br /&gt;
&lt;br /&gt;
stop on runlevel 0&lt;br /&gt;
stop on runlevel 1&lt;br /&gt;
stop on runlevel 6&lt;br /&gt;
&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty 38400 ttyS0&amp;quot; &amp;gt; /etc/event.d/ttyS0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1&lt;br /&gt;
terminal --timeout=15 serial console&lt;br /&gt;
&lt;br /&gt;
append to kernel lines: &lt;br /&gt;
console=tty0 console=ttyS0,38400n8&lt;br /&gt;
&lt;br /&gt;
show menu:&lt;br /&gt;
#hiddenmenu&lt;br /&gt;
&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
# to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
&lt;br /&gt;
pwconv&lt;br /&gt;
&lt;br /&gt;
mkdir /home/bb&lt;br /&gt;
chown bb.bb /home/bb&lt;br /&gt;
&lt;br /&gt;
cd ~bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx)&lt;br /&gt;
&lt;br /&gt;
chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
#(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
#(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
&lt;br /&gt;
#make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;/data 10.1.4.0/24(rw, no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo &#039;10.1.4.8                backup1&#039; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &#039;/dev/sdb1	/data  ext3  rw,noatime  0  0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to install digi drivers:&lt;br /&gt;
&lt;br /&gt;
wget http://ftp1.digi.com/support/driver/40002086_n.tgz&lt;br /&gt;
apt-get install linux-image-2.6.24-19-server&lt;br /&gt;
apt-get install linux-source-2.6.24 (not needed?)&lt;br /&gt;
apt-get install linux-headers-2.6.24-19-server &lt;br /&gt;
apt-get install make&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install g++	&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install expect&lt;br /&gt;
apt-get install libdbi-perl libdate-calc-perl libdbd-mysql-perl&lt;br /&gt;
&lt;br /&gt;
cd /usr/src; ln -s linux-headers-2.6.24-19-server linux&lt;br /&gt;
./configure&lt;br /&gt;
make all&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
&lt;br /&gt;
/usr/bin/dgrp_cfg_node -v -v init el 65.116.11.2 8&lt;br /&gt;
&lt;br /&gt;
apt-get install mysql&lt;br /&gt;
&lt;br /&gt;
mkdir /data/mysql&lt;br /&gt;
chown mysql:mysql /data/mysql&lt;br /&gt;
/etc/init.d/mysql stop&lt;br /&gt;
mv /var/lib/mysql/* /data/mysql/&lt;br /&gt;
mv /data/mysql/ib_* /var/lib/mysql/&lt;br /&gt;
vi /etc/mysql/my.cnf&lt;br /&gt;
(change datadir to /data/mysql)&lt;br /&gt;
vi /etc/apparmor.d/usr.sbin.mysqld&lt;br /&gt;
add:&lt;br /&gt;
  /data/mysql/ r,&lt;br /&gt;
  /data/mysql/** rwk,&lt;br /&gt;
Comment out:&lt;br /&gt;
#  /var/lib/mysql/ r,&lt;br /&gt;
#  /var/lib/mysql/** rwk,&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/apparmor restart&lt;br /&gt;
/etc/init.d/mysql start&lt;br /&gt;
&lt;br /&gt;
tw_cli /c0/u0 set ignoreECC=on&lt;br /&gt;
tw_cli /c0/u0 set storsave=balance&lt;br /&gt;
tw_cli /c0/u0 set cache=on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
In case of an outage, nfs will hang on all connected servers until the nfs service returns. If you can&#039;t get backup2 back online, you can get nfs running elsewhere and fake backup2&#039;s MAC&#039;s: priv: 00:0e:0c:59:c1:a6, pub: 00:07:e9:5b:c6:45&lt;br /&gt;
&lt;br /&gt;
To configure:&lt;br /&gt;
 ifconfig fxp0 link 00:90:27:f9:0a:d9&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= firewall2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at i2b. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.2, Pub IPs: 66.181.18.3 (external), 69.55.229.1 &amp;amp; 69.55.231.1 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. TODO: describe NIC location/orientation&lt;br /&gt;
&lt;br /&gt;
* Hardware: 2 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 73 GB (2 x 73GB) RAID1 array running on an LSI MegaRAID SCSI 320 PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
TODO: need backup f/w and instructions on how to move cables.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the config on the live firewall:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias0=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias1=&amp;quot;inet 65.50.228.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias2=&amp;quot;inet 65.50.229.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias3=&amp;quot;inet 65.50.230.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias4=&amp;quot;inet 65.50.231.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias5=&amp;quot;inet 65.50.232.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias6=&amp;quot;inet 65.50.233.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias7=&amp;quot;inet 65.50.234.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_bge1_alias8=&amp;quot;inet 65.50.235.1  netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup3&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
 59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
 3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
Capture counts periodically&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
Checking the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;partition map:&lt;br /&gt;
/ 58g&lt;br /&gt;
swap 4g&lt;br /&gt;
/var 512m&lt;br /&gt;
/tmp 512m&lt;br /&gt;
/usr 5.5g&lt;br /&gt;
&lt;br /&gt;
4. edit /etc/make.conf &lt;br /&gt;
echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=firewall2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&lt;br /&gt;
&lt;br /&gt;
5. add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. populate hosts&lt;br /&gt;
echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
8. put key in authorized_keys on backup3&lt;br /&gt;
cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
Punch a hole in firewall1 to allow traffic to backup servers @ castle:&lt;br /&gt;
&lt;br /&gt;
ipfw add 99 allow ip from 66.181.18.0/27 to 69.55.230.10 22&lt;br /&gt;
ipfw add 95 allow ip from 66.181.18.0/27 to 69.55.230.11 22&lt;br /&gt;
&lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. edit root&#039;s path and login script:&lt;br /&gt;
vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
11. install cvsup&lt;br /&gt;
cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
12. get latest sources for this release:&lt;br /&gt;
cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
13. configure new kernel. &lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf &lt;br /&gt;
scp backup2:/mnt/data4/build/freebsd/firewall2-6.4 ./firewall2&lt;br /&gt;
&lt;br /&gt;
15. build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&lt;br /&gt;
&lt;br /&gt;
17. populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_bce1=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;66.181.18.2&amp;quot;&lt;br /&gt;
hostname=&amp;quot;firewall2.johncompanies.com&amp;quot;&lt;br /&gt;
ifconfig_bge0=&amp;quot;inet 66.181.18.3  netmask 255.255.255.224&amp;quot;&lt;br /&gt;
ifconfig_bge1=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
20. reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
uname -a&lt;br /&gt;
&lt;br /&gt;
21. update ports:&lt;br /&gt;
cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
22. Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
# linux base&lt;br /&gt;
cd /usr/ports/devel/libtool22&lt;br /&gt;
make install base&lt;br /&gt;
&lt;br /&gt;
cd /usr/ports/emulators/linux_base-fc4&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
#linux-megamgr-5.20&lt;br /&gt;
cd /usr/ports/sysutils/linux-megamgr&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
# megarc-1.51&lt;br /&gt;
cd /usr/ports/sysutils/megarc&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
rehash; megarc -ldInfo -a0 -l0&lt;br /&gt;
&lt;br /&gt;
23. install rsync from ports&lt;br /&gt;
cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
25. install bb client&lt;br /&gt;
adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 firewall2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;firewall2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
27. configure bb on mail:&lt;br /&gt;
vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
66.181.18.3 firewall2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&lt;br /&gt;
&lt;br /&gt;
29. configure ntp&lt;br /&gt;
echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
30. fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
33. setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/firewall2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
ssh backup3 mkdir -p /data/firewall2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
34. mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
35. edit sshd_config for security&lt;br /&gt;
vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.3&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&lt;br /&gt;
&lt;br /&gt;
35. raid chk&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
36. add crontab entries&lt;br /&gt;
crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&lt;br /&gt;
&lt;br /&gt;
scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&lt;br /&gt;
&lt;br /&gt;
Setup basic ruleset&lt;br /&gt;
&lt;br /&gt;
ipfw add 00009 count udp from any to any&lt;br /&gt;
ipfw add 00010 allow tcp from any to any established&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn tcpoptions !mss&lt;br /&gt;
ipfw add 00012 deny icmp from any to any icmptypes 4,5,9,10,12,13,14,15,16,17,18&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags syn,fin&lt;br /&gt;
ipfw add 00012 deny tcp from any to any tcpflags fin,psh,rst,urg&lt;br /&gt;
ipfw add 00012 allow icmp from any to any&lt;br /&gt;
ipfw add 00014 deny tcp from any to any dst-port 135&lt;br /&gt;
ipfw add 00150 skipto 65535 ip from any to any via em1 in&lt;br /&gt;
&lt;br /&gt;
IPKVM3:&lt;br /&gt;
00098 allow ip from { 69.55.230.6 or 69.55.230.7 } to 69.55.230.10 dst-port 139&lt;br /&gt;
00098 deny ip from any to 69.55.230.10 dst-port 139&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=856</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=856"/>
		<updated>2013-02-24T22:25:09Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Account Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
We resell [http://rsync.net http://rsync.net] backup service as our own. We try to label it as our own too, by removing as many if not all references to rsync.net as we can.&lt;br /&gt;
&lt;br /&gt;
Bills are sent on the 15th of the month, as is a detailed report. JC receives and additional 10% off the existing [http://www.rsync.net/products/reseller.html reseller discounts]&lt;br /&gt;
&lt;br /&gt;
= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there in the location the customer has requested, you can request additional &amp;quot;client&amp;quot; accounts. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com (SD)&lt;br /&gt;
usw-s004 =&amp;gt; rsync4 (SD)&lt;br /&gt;
usw-s007 =&amp;gt; rsync7 (DEN)&lt;br /&gt;
usw-s008 =&amp;gt; rsync8 (DEN)&lt;br /&gt;
ch-s010 =&amp;gt; rsync10 (ZUR)&lt;br /&gt;
ch-s011 =&amp;gt; rsync11 (ZUR)&lt;br /&gt;
hk-s020 =&amp;gt; rsync20 (HK)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=855</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=855"/>
		<updated>2013-02-24T22:23:51Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Account Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
We resell [http://rsync.net http://rsync.net] backup service as our own. We try to label it as our own too, by removing as many if not all references to rsync.net as we can.&lt;br /&gt;
&lt;br /&gt;
Bills are sent on the 15th of the month, as is a detailed report. JC receives and additional 10% off the existing [http://www.rsync.net/products/reseller.html reseller discounts]&lt;br /&gt;
&lt;br /&gt;
= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com (SD)&lt;br /&gt;
usw-s004 =&amp;gt; rsync4 (SD)&lt;br /&gt;
usw-s007 =&amp;gt; rsync7 (DEN)&lt;br /&gt;
usw-s008 =&amp;gt; rsync8 (DEN)&lt;br /&gt;
ch-s010 =&amp;gt; rsync10 (ZUR)&lt;br /&gt;
ch-s011 =&amp;gt; rsync11 (ZUR)&lt;br /&gt;
hk-s020 =&amp;gt; rsync20 (HK)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=854</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=854"/>
		<updated>2013-02-24T22:23:21Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Account Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
We resell [http://rsync.net http://rsync.net] backup service as our own. We try to label it as our own too, by removing as many if not all references to rsync.net as we can.&lt;br /&gt;
&lt;br /&gt;
Bills are sent on the 15th of the month, as is a detailed report. JC receives and additional 10% off the existing [http://www.rsync.net/products/reseller.html reseller discounts]&lt;br /&gt;
&lt;br /&gt;
= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com SD&lt;br /&gt;
usw-s004 =&amp;gt; rsync4 SD&lt;br /&gt;
usw-s007 =&amp;gt; rsync7 DEN&lt;br /&gt;
usw-s008 =&amp;gt; rsync8 DEN&lt;br /&gt;
ch-s010 =&amp;gt; rsync10 ZUR&lt;br /&gt;
ch-s011 =&amp;gt; rsync11 ZUR&lt;br /&gt;
hk-s020 =&amp;gt; rsync20 HK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=853</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=853"/>
		<updated>2013-02-24T22:22:22Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
We resell [http://rsync.net http://rsync.net] backup service as our own. We try to label it as our own too, by removing as many if not all references to rsync.net as we can.&lt;br /&gt;
&lt;br /&gt;
Bills are sent on the 15th of the month, as is a detailed report. JC receives and additional 10% off the existing [http://www.rsync.net/products/reseller.html reseller discounts]&lt;br /&gt;
&lt;br /&gt;
= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=852</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=852"/>
		<updated>2013-02-24T22:21:55Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
We resell [http://rsync.net] backup service as our own. We try to label it as our own too, by removing as many if not all references to rsync.net as we can.&lt;br /&gt;
&lt;br /&gt;
Bills are sent on the 15th of the month, as is a detailed report. JC receives and additional 10% off the existing [http://www.rsync.net/products/reseller.html reseller discounts]&lt;br /&gt;
&lt;br /&gt;
= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=851</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=851"/>
		<updated>2013-02-24T22:21:08Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
We resell [[[rsync.net]]] backup service as our own. We try to label it as our own too, by removing as many if not all references to rsync.net as we can.&lt;br /&gt;
&lt;br /&gt;
Bills are sent on the 15th of the month, as is a detailed report. JC receives and additional 10% off the existing [[http://www.rsync.net/products/reseller.html reseller discounts ]]&lt;br /&gt;
&lt;br /&gt;
= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=850</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=850"/>
		<updated>2013-02-24T22:20:50Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
We resell [[[rsync.net]]] backup service as our own. We try to label it as our own too, by removing as many if not all references to rsync.net as we can.&lt;br /&gt;
&lt;br /&gt;
Bills are sent on the 15th of the month, as is a detailed report. JC receives and additional 10% off the existing [reseller discounts http://www.rsync.net/products/reseller.html]&lt;br /&gt;
&lt;br /&gt;
= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=849</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=849"/>
		<updated>2013-02-24T22:20:29Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
We resell [rsync.net] backup service as our own. We try to label it as our own too, by removing as many if not all references to rsync.net as we can.&lt;br /&gt;
&lt;br /&gt;
Bills are sent on the 15th of the month, as is a detailed report. JC receives and additional 10% off the existing [reseller discounts http://www.rsync.net/products/reseller.html]&lt;br /&gt;
&lt;br /&gt;
= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=848</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=848"/>
		<updated>2013-02-24T22:20:05Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
We resell [[rsync.net]] backup service as our own. We try to label it as our own too, by removing as many if not all references to rsync.net as we can.&lt;br /&gt;
&lt;br /&gt;
Bills are sent on the 15th of the month, as is a detailed report. JC receives and additional 10% off the existing [[reseller discounts http://www.rsync.net/products/reseller.html]].&lt;br /&gt;
&lt;br /&gt;
= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=847</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=847"/>
		<updated>2013-02-24T22:18:59Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
We resell rsync.net&#039;s backup service as our own. We try to label it as our own too, by removing as many if not all references to rsync.net as we can.&lt;br /&gt;
&lt;br /&gt;
Bills are sent on the 15th of the month, as is a detailed report. JC receives and additional 10% off the existing reseller discounts. &lt;br /&gt;
&lt;br /&gt;
= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Main_Page&amp;diff=846</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Main_Page&amp;diff=846"/>
		<updated>2013-02-24T22:17:05Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Special:AllPages|All Pages]]&lt;br /&gt;
* [[Payment_System|Payment System]]&lt;br /&gt;
* [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|Management System / Public Website / Signup / Account Manager]]&lt;br /&gt;
* [[New_Signups|New Signups]]&lt;br /&gt;
* [[Shutting_Down_Service|Shutting Down Service]]&lt;br /&gt;
* [[Routine_Maintenance|Routine Maintenance]]&lt;br /&gt;
* Reference&lt;br /&gt;
** [[VPS_Management|VPS Management]]&lt;br /&gt;
** [[Jail_Server_Install|Jail Server Install]]&lt;br /&gt;
** [[Infrastructure_Machines|Infrastructure Machines]]&lt;br /&gt;
** [[Colo_Server_Setup|Colo Server Setup]]&lt;br /&gt;
** [[DNS]]&lt;br /&gt;
** [[FreeBSD_Reference|FreeBSD Reference]]&lt;br /&gt;
** [[Virtuozzo_Reference|Virtuozzo Reference]]&lt;br /&gt;
** [[Cabinetmap]]&lt;br /&gt;
** [[Switch_Control|Switch Control]]&lt;br /&gt;
** [[Private_IP_Mapping|Private IP Mapping]]&lt;br /&gt;
** [[Data_Center_Notes|Data Center Notes]]&lt;br /&gt;
** [[Crash_Reference|Crash Reference]]&lt;br /&gt;
** [[Hardware_Reference|Hardware Reference]]&lt;br /&gt;
** [[ATS]]&lt;br /&gt;
** [[Wiring_Reference|Wiring Reference]]&lt;br /&gt;
** [[Screen]]&lt;br /&gt;
** [[RAID_Cards|RAID Cards]]&lt;br /&gt;
** [[BigBrother]]&lt;br /&gt;
** [[Bandwidth_Management|Bandwidth Management]]&lt;br /&gt;
* [[System-generated_Notifications|System-generated Notifications]]&lt;br /&gt;
* [[Customer_Interaction|Customer Interaction]]&lt;br /&gt;
* [[Backup_Accounts_(rsync.net)| Backup Accounts (rsync.net)]]&lt;br /&gt;
* [[Todo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://meta.wikimedia.org/wiki/Help:Advanced_editing Advanced Editing]&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=845</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=845"/>
		<updated>2013-02-24T22:16:31Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Reseller Control Panel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
4516 / (mail pass)&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=844</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=844"/>
		<updated>2013-02-24T22:14:56Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Shutting Down Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
1. email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=843</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=843"/>
		<updated>2013-02-24T22:14:42Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Shutting Down Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
# email support@rsync.net asking them to wipe and reset the password on the account. Once received, change the password to something else (since the original password they will reset it to is likely the same one JC gave to it&#039;s customer to use the account). Passwords can be reset as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;ssh -t xxxx@xxxx passwd &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=842</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=842"/>
		<updated>2013-02-24T22:13:32Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Account Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. &lt;br /&gt;
&lt;br /&gt;
If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
If there is an unused account, use that and ask support@rsync.net for a password reset if the password is not known.&lt;br /&gt;
&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
# email support@rsync.net asking them to wipe and reset the password on the account&lt;br /&gt;
# mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=841</id>
		<title>Backup Accounts (rsync.net)</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Backup_Accounts_(rsync.net)&amp;diff=841"/>
		<updated>2013-02-24T22:12:24Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: Created page with &amp;quot;= Reseller Control Panel =  https://www.rsync.net/am/dashboard.html?u=4516  = Account Setup =  When we need to setup a new backup account for a JC customer, first login to the...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Reseller Control Panel =&lt;br /&gt;
&lt;br /&gt;
https://www.rsync.net/am/dashboard.html?u=4516&lt;br /&gt;
&lt;br /&gt;
= Account Setup =&lt;br /&gt;
&lt;br /&gt;
When we need to setup a new backup account for a JC customer, first login to the Reseller Control Panel. Usually there&#039;s a few unused accounts. If there is no free (unused) accounts there, you can request additional ones. When requested, the login ID and password are sent to support@johncompanies.com&lt;br /&gt;
Once allocated, add the login ID to the customer&#039;s notes field and notate the customers CID in the Reseller Control Panel (nickname the account). Also, setup the quota that the customer has selected.&lt;br /&gt;
&lt;br /&gt;
When a backup account is created, we send out an email to them as follows (note the EDIT fields):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Subject: Your backup filesystem is ready!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your login information is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Host address: rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Username: 40013 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Password: 804d73a9 [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please contact us any time regarding _any matter_ related to your account, your implementation, scripting, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The login information above provides everything you need to access your filesystem, however some examples are necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you ftp to the system, you begin your session in the root of your own filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same is true when you ssh to the system - it is NOT necessary to specify a home, or &amp;quot;starting&amp;quot; directory.  So, an scp command might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com: [EDIT]&lt;br /&gt;
                (trailing : is necessary)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        sftp 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
                (NO trailing : necessary with sftp...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to specify the location of a remote directory in your backup account, you do it _without_ a preceding &#039;/&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        scp /some/file 40013@rsync4.johncompanies.com:some/directory/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OR:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        rsync -avz /some/file 40013@rsync4.johncompanies.com:other/dir/tree [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This email, with your login name and password, has been sent in clear text, so we strongly suggest that you immediately change your password. You may change your password yourself by issuing the `passwd` command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh -t 40013@rsync4.johncompanies.com passwd [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows users may set their password the same way, using the putty ssh client. Please see these brief instructions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/windows_putty_password.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check your filesystem usage, simply run the quota command over ssh:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com quota [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a more detailed report on filesystem usage, ssh to the system with no arguments:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ssh 40013@rsync4.johncompanies.com [EDIT]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Again, Windows users please see the URL above on performing these tasks with putty.exe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Your home directory contains a .ssh directory that you can place an authorized_keys (RSA or DSA) file in, which will allow you to interact with your filesystem in an automated fashion.  There is a detailed HOWTO on this topic here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://johncompanies.com/rsync/ssh_keys.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We encourage you to email support@johncompanies.com for any reason whatsoever, so that we may aid you in using your backup account in the way that suits you best.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, we are very happy to have you as a customer and look forward to serving you in any way that we can.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
support@johncompanies.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So we can brand the service as our own, we&#039;ve setup DNS hostnames for the following rsync.net servers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;usw-s002.rsync.net =&amp;gt; rsync2.johncompanies.com&lt;br /&gt;
usw-s004 =&amp;gt; rsync4&lt;br /&gt;
usw-s007 =&amp;gt; rsync7&lt;br /&gt;
usw-s008 =&amp;gt; rsync8&lt;br /&gt;
ch-s010 =&amp;gt; rsync10&lt;br /&gt;
ch-s011 =&amp;gt; rsync11&lt;br /&gt;
hk-s020 =&amp;gt; rsync20&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any other/new rsync servers will need to be setup as needed.&lt;br /&gt;
&lt;br /&gt;
= Shutting Down Service =&lt;br /&gt;
&lt;br /&gt;
# email support@rsync.net asking them to wipe and reset the password on the account&lt;br /&gt;
# mark the account as &amp;quot;unused&amp;quot; in the Reseller Control Panel&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Todo&amp;diff=840</id>
		<title>Todo</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Todo&amp;diff=840"/>
		<updated>2013-02-23T04:53:37Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* pull out all dave@&lt;br /&gt;
* xfer cc info from new cust pmt to existing cust&lt;br /&gt;
* add next pmt date to add system&lt;br /&gt;
* backup.md on jail8 (and others)&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=819</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=819"/>
		<updated>2013-01-26T22:16:34Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* process flows from bwdb2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 2048m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 7 allow icmp from any to me&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup.&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=818</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=818"/>
		<updated>2013-01-26T18:05:34Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* process flows from bwdb2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 2048m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 6 allow ip from me to me 4444&lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup.&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=817</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=817"/>
		<updated>2013-01-26T03:03:24Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* process flows from bwdb2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 2048m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my $mysql = &#039;/usr/local/bin/mysql&#039;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | $mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | $mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup.&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=816</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=816"/>
		<updated>2013-01-26T01:15:44Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* process flows from bwdb2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 2048m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb: processsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup.&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=815</id>
		<title>Infrastructure Machines</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Infrastructure_Machines&amp;diff=815"/>
		<updated>2013-01-26T01:09:24Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Install OS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= mail =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is the swiss army knife of the company, playing host to many services and functions. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.5, Pub IPs: 69.55.230.2, 69.55.225.225 (ns1c jail), 69.55.230.9. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Dell 2450. 4 SCSI SCA drive bays (2 columns of 2, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: two 36 GB (2 x 36GB) RAID1 arrays running on an Adaptec-based, Dell-branded (perc) RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* mail&lt;br /&gt;
* web&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother server/pager&lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== email ==&lt;br /&gt;
This server hosts mail for johncompanies.com (mail.johncompanies.com). Sendmail 8.13.6/8.13.6 is listening on 69.55.230.2 port 25 for incoming mail. Relaying is allowed per /etc/mail/relay-domains&lt;br /&gt;
Other addresses (aliases) are defined per /etc/mail/aliases&lt;br /&gt;
&lt;br /&gt;
The following active users have mail hosted on this server:&lt;br /&gt;
* dave&lt;br /&gt;
* linux&lt;br /&gt;
* support&lt;br /&gt;
* payments&lt;br /&gt;
* sales&lt;br /&gt;
* tech1&lt;br /&gt;
* info&lt;br /&gt;
&lt;br /&gt;
Traditionally, mail is checked via shell apps (pine). qpopper (pop3s) is running to allow mail downloading. Checking mail in this way causes an opened INBOX in pine to lock read-only. For this reason, we tee incoming mail to support and linux to tech1.&lt;br /&gt;
&lt;br /&gt;
Procmail rules are setup to filter spam and send text messages. They are enabled for info, support, linux, tech1, dave and can be found in ~/Procmail/, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;# more ~support/Procmail/rc.emergency&lt;br /&gt;
:0c # use c only if you want to forward a copy and file the original later&lt;br /&gt;
* ^Subject:.*\&amp;lt;emergency\&amp;gt;&lt;br /&gt;
* ! ^Subject:\&amp;lt;re\&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
   :0h&lt;br /&gt;
   FROMANDSUBJECT=|formail -XFrom: -XSubject:&lt;br /&gt;
&lt;br /&gt;
   :0fwh&lt;br /&gt;
   | /usr/local/bin/formail -I&amp;quot;Subject: &amp;quot; -I&amp;quot;To: pager@johncompanies.com&amp;quot; ; echo $FROMANDSUBJECT ; echo&lt;br /&gt;
&lt;br /&gt;
   :0&lt;br /&gt;
  ! -t&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
control: &amp;lt;tt&amp;gt;cd /etc/mail; make stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;cd /etc/mail; make start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
The following aliases are also in place:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;debian:         linux&lt;br /&gt;
jobs:   info&lt;br /&gt;
careers:        info&lt;br /&gt;
#reboot:         6128102202@txt.att.net&lt;br /&gt;
#reboot:         8582298897@vtext.com&lt;br /&gt;
reboot:         pager&lt;br /&gt;
#pager: 8582298897@vtext.com&lt;br /&gt;
pager:  4158718324@txt.att.net&lt;br /&gt;
tech1on:  &amp;quot;| /usr/local/sbin/tech1on.sh&amp;quot;&lt;br /&gt;
tech1off:  &amp;quot;| /usr/local/sbin/tech1off.sh&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change them, edit &amp;lt;tt&amp;gt;/etc/aliases&amp;lt;/tt&amp;gt; and then run &amp;lt;tt&amp;gt;newaliases&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note on tech1: this address was setup as a read-only address to be mirrored on all email coming into support and linux. We set this up so we could easily check support mail via a pop client- popping email locks out the user in pine so checking support/linux directly via pop was not an option. When checking and responding to email that comes into tech1, care should be taken to make sure it is sent as/under an address other than tech1. This is cause tech1 is not monitored by support staff as closely as email to support/linux. Further, the tech on call may not be checking tech1. Lastly, because of the nature of the copying, you will sometimes notice certain automated email/notices are received 2x in support- this is because of/related to the tech1 mirror.&lt;br /&gt;
&lt;br /&gt;
== web == &lt;br /&gt;
&lt;br /&gt;
See [[Management_System_/_Public_Website_/_Signup|Management System / Public Website / Signup]]&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
mysql 4.1.22 is running on port 3306&lt;br /&gt;
&lt;br /&gt;
* datadir: &amp;lt;tt&amp;gt;/mnt/data1/db/mysql/&amp;lt;/tt&amp;gt;&lt;br /&gt;
* config: &amp;lt;tt&amp;gt;/etc/my.cnf&amp;lt;/tt&amp;gt;&lt;br /&gt;
* database: &amp;lt;tt&amp;gt;jc&amp;lt;/tt&amp;gt;&lt;br /&gt;
* control: &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh stop&amp;lt;/tt&amp;gt; (stop), &amp;lt;tt&amp;gt;/usr/local/etc/rc.d/mysql-server.sh start&amp;lt;/tt&amp;gt; (start)&lt;br /&gt;
&lt;br /&gt;
== bigbrother ==&lt;br /&gt;
There is a client running on mail (which monitors the services running on mail and mail itself), installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbc1.9e-btf&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And the big brother pager/server (which displays information gathered from all bb-monitored machines, including mail) is installed under &amp;lt;tt&amp;gt;/usr/home/bb/bbsrc/bb1.9i-btf&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both are running under the user &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Refer to [[BigBrother]] for more about use.&lt;br /&gt;
&lt;br /&gt;
== DNS (ns1c.johncompanies.com) ==&lt;br /&gt;
ns1c is a jail running on the mail server, who&#039;s IP is 69.55.225.225&lt;br /&gt;
&lt;br /&gt;
It&#039;s running from &amp;lt;tt&amp;gt;/mnt/data1/ns1c-dir&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[DNS]] for more details&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* always mounted to backup1 and backup2 via nfs: &lt;br /&gt;
&amp;lt;pre&amp;gt;backup2:/mnt/data1 on /backup (nfs)&lt;br /&gt;
backup2:/mnt/data2 on /backup2 (nfs)&lt;br /&gt;
backup2:/mnt/data3 on /backup3 (nfs)&lt;br /&gt;
backup2:/mnt/data4 on /backup4 (nfs)&lt;br /&gt;
backup1:/data on /backup1 (nfs)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 * * * * * /usr/local/www/mgmt/mrtg/mrtg.sh &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
Gathers up data for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * /usr/local/bin/rsync -a root@nat2:/mnt/data1/mrtg/data/ /usr/local/www/mgmt/mrtg/data/&lt;br /&gt;
Gathers up data from i2b servers for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 40 0 * * * /usr/local/bin/rsync -a root@nat2:&amp;quot;/mnt/data1/mrtg/*.cfg&amp;quot; /usr/local/www/mgmt/mrtg&lt;br /&gt;
Gathers up mrtg configuration (port names) from i2b switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 41 0 * * * for f in `grep -l &amp;quot;mnt\/data1&amp;quot; /usr/local/www/mgmt/mrtg/switch-p*.cfg`; do cat $f | sed s#\/mnt\/data1#\/usr\/local\/www\/mgmt# &amp;gt; $f.new; mv $f.new $f; done&lt;br /&gt;
Gathers up mrtg configuration (port names) from castle switches for our mrtg/load graphs&lt;br /&gt;
&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20ip /usr/local/www/mgmt/html/top20ip_last&lt;br /&gt;
 1 0 1 * * cp /usr/local/www/mgmt/html/top20customers /usr/local/www/mgmt/html/top20customers_last&lt;br /&gt;
 2 * * * * /usr/local/www/cronjobs/top20ip.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 15 * * * * /usr/local/www/cronjobs/top20customer.pl &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 1 0 1 * * rm /usr/local/www/mgmt/html/bandtrack&lt;br /&gt;
Archiving and generation of bandwidth statistics presented in mgmt -&amp;gt; Reference -&amp;gt; Bandwidth&lt;br /&gt;
&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Nightly backup script&lt;br /&gt;
&lt;br /&gt;
 0 1 * * * /usr/local/www/mgmt/awstats/wwwroot/cgi-bin/awstats.pl -config=jcpub -update&lt;br /&gt;
Public web traffic stats&lt;br /&gt;
&lt;br /&gt;
 15 0 * * * rm /usr/local/www/mgmt/bwgraphs/*.png&lt;br /&gt;
 16 0 * * * rm /usr/local/www/am/bwgraphs/*&lt;br /&gt;
Cleanup for graph-related temp data generated by customers using the bandwidth reports via the AM &lt;br /&gt;
&lt;br /&gt;
 10 0 1 * * /usr/local/www/cronjobs/monthly_bandwidth_report.pl&lt;br /&gt;
Monthly bandwidth overage report&lt;br /&gt;
&lt;br /&gt;
 */3 * * * * /usr/local/www/cronjobs/bbcheck.pl&lt;br /&gt;
Updates mgmt with bb monitoring issues&lt;br /&gt;
&lt;br /&gt;
 5 0 * * * /usr/local/www/cronjobs/shutdownreminder.pl&lt;br /&gt;
Emails customers reminding them of upcoming shutdown date&lt;br /&gt;
&lt;br /&gt;
 7 0 * * * /usr/local/www/cronjobs/invoice_email.pl&lt;br /&gt;
Emails customers who have invoices and are set to auto-email (currently no customer gets these)&lt;br /&gt;
&lt;br /&gt;
 8 */4 * * * /usr/local/www/cronjobs/mysqlrepchk.pl&lt;br /&gt;
Checking that we are properly replicating (mysql) traffic data from bwdb to backup1&lt;br /&gt;
&lt;br /&gt;
 16 0 1 * * /usr/local/www/cronjobs/purge_traffic.pl&lt;br /&gt;
Removed old traffic data from the traffic database (running on backup1)&lt;br /&gt;
&lt;br /&gt;
 */5 * * * * chmod 0700 /usr/local/www/ccard_orders/* &amp;amp;&amp;amp; mv /usr/local/www/ccard_orders/* /usr/local/www/ccard_orders/done&lt;br /&gt;
Secure credit card data: set root-read-only &lt;br /&gt;
&lt;br /&gt;
 25 0 * * * /usr/local/www/cronjobs/biller.pl&lt;br /&gt;
Enters service charges in customer billing ledgers&lt;br /&gt;
&lt;br /&gt;
 10 13 * * * /usr/local/www/cronjobs/pfp_batch_gather.pl&lt;br /&gt;
Looks for customers with balance due and active credit card on file, prepares a payflow batch&lt;br /&gt;
&lt;br /&gt;
 10 14 * * * /usr/local/www/cronjobs/pfp_batch_process.pl&lt;br /&gt;
Tries to collect ccard funds for items in payflow batch - communicates with payflow&lt;br /&gt;
&lt;br /&gt;
 0 7 * * 1 /usr/local/www/cronjobs/email_pmt_reminder.pl&lt;br /&gt;
Emails customers in arrears, reminding them to pay&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /usr/bin/mail -s &#039;archive sent mail in pine&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
Reminds us to archive sent mail&lt;br /&gt;
&lt;br /&gt;
 0 3 * * * /usr/local/bin/rsync -a isys.e-monitoring.net:/var/mail /backup2/isys; /usr/local/bin/rsync -a isys.e-monitoring.net:/usr/home /backup2/isys&lt;br /&gt;
Backup data on isys&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
= nat =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions. Further, it&#039;s ip runs in a special block which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.1, Pub IPs: 69.55.233.195, 69.55.233.196, 69.55.233.197, 69.55.233.198, 69.55.233.199. 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 1U. single power supply. &lt;br /&gt;
* Drives: one 8 GB IDE drive&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
&lt;br /&gt;
== nat control ==&lt;br /&gt;
All rules are contained in and look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# www (was 69.55.230.12)&lt;br /&gt;
# virt19&lt;br /&gt;
#bimap fxp0 10.1.4.209/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# virt18&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt13&lt;br /&gt;
#bimap fxp0 10.1.4.213/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt12&lt;br /&gt;
#bimap fxp0 10.1.4.212/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt17&lt;br /&gt;
bimap fxp0 10.1.4.217/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# virt11&lt;br /&gt;
#bimap fxp0 10.1.4.211/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# ASA&lt;br /&gt;
#bimap fxp0 10.1.4.172/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
# P1A&lt;br /&gt;
bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
# developer (was 69.55.230.17)&lt;br /&gt;
# jail2&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail8&lt;br /&gt;
#bimap fxp0 10.1.4.238/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# jail9&lt;br /&gt;
#bimap fxp0 10.1.4.239/32 -&amp;gt; 69.55.233.198/32&lt;br /&gt;
# POLL&lt;br /&gt;
#BIMAP EM0 10.1.6.134/32 -&amp;gt; 69.55.230.20/32&lt;br /&gt;
# 1U SUN&lt;br /&gt;
#BIMAP EM0 10.1.4.4/32 -&amp;gt; 69.55.227.46/32&lt;br /&gt;
# ??&lt;br /&gt;
#BIMAP EM0 10.1.6.3/32 -&amp;gt; 69.55.230.100/32&lt;br /&gt;
# random machine&lt;br /&gt;
#bimap fxp0 10.1.6.13/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
#bimap fxp0 10.1.4.232/32 -&amp;gt; 69.55.233.199/32&lt;br /&gt;
# OFFICE OUTBOUND TRAFFIC&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
#map fxp0 10.1.6.0/24 -&amp;gt; 0.0.0.0/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple entry looks like:&lt;br /&gt;
 bimap fxp0 10.1.4.240/32 -&amp;gt; 69.55.233.197/32&lt;br /&gt;
Which essentially means make private IP 10.1.4.240 reachable on 69.55.233.197 and allow 10.1.4.240 to communicate with the public internet via 69.55.233.197&lt;br /&gt;
&lt;br /&gt;
To reload new rule config:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
You may want to setup natting, as above, when you need to reach a DRAC card&#039;s web interface, wherin the DRAC card only has a private IP.&lt;br /&gt;
&lt;br /&gt;
= nat2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This is the main machine to which we ssh and runs all our screen sessions at i2b, and runs ns3c (this is kind of the what mail is to castle). Further, it&#039;s ip runs in IP space provided by i2b: 66.181.18.1 - 66.181.18.30, which is not routed through the firewall and this is somewhat immune to DoS attacks which hobble our firewall. Lastly, it acts as a nat server for certain/random devices on the private network.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.1, Pub IPs: 69.55.229.2, 69.55.229.3, 66.181.18.4, 66.181.18.5, 66.181.18.6, 66.181.18.7, 66.181.18.8, 66.181.18.9, 66.181.18.10, 66.181.18.11, 66.181.18.12, 66.181.18.13, 66.181.18.14 1 onboard and 1 PCI&lt;br /&gt;
* Hardware: Custom 2U. 6 drive bays, non-hot-swappable. single power supply. &lt;br /&gt;
* Drives: one 150 GB (2 x 150GB) RAID1 array running on a 3ware 8006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* nat&lt;br /&gt;
* bigbrother&lt;br /&gt;
* ns3c (jail)&lt;br /&gt;
&lt;br /&gt;
== nat config ==&lt;br /&gt;
Here&#039;s what&#039;s currently nat&#039;d on nat2:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
#ATS-9&lt;br /&gt;
bimap em0 10.1.2.79/32 -&amp;gt; 66.181.18.14/32&lt;br /&gt;
#ATS-8&lt;br /&gt;
bimap em0 10.1.2.78/32 -&amp;gt; 66.181.18.13/32&lt;br /&gt;
#ATS-7&lt;br /&gt;
bimap em0 10.1.2.77/32 -&amp;gt; 66.181.18.12/32&lt;br /&gt;
#ATS-6&lt;br /&gt;
bimap em0 10.1.2.76/32 -&amp;gt; 66.181.18.6/32&lt;br /&gt;
#ATS-5&lt;br /&gt;
bimap em0 10.1.2.75/32 -&amp;gt; 66.181.18.7/32&lt;br /&gt;
#ATS-4&lt;br /&gt;
bimap em0 10.1.2.74/32 -&amp;gt; 66.181.18.8/32&lt;br /&gt;
#ATS-3&lt;br /&gt;
bimap em0 10.1.2.73/32 -&amp;gt; 66.181.18.9/32&lt;br /&gt;
#ATS-2&lt;br /&gt;
bimap em0 10.1.2.72/32 -&amp;gt; 66.181.18.10/32&lt;br /&gt;
#ATS-1&lt;br /&gt;
bimap em0 10.1.2.71/32 -&amp;gt; 66.181.18.11/32&lt;br /&gt;
#bwdb2&lt;br /&gt;
bimap em0 10.1.2.4/32 -&amp;gt; 66.181.18.5/32&lt;br /&gt;
&lt;br /&gt;
# spare&lt;br /&gt;
&lt;br /&gt;
map em0 10.1.2.0/24 -&amp;gt; 0.0.0.0/32 proxy port ftp ftp/tcp&lt;br /&gt;
&lt;br /&gt;
#bimap fxp0 10.1.6.49/32 -&amp;gt; 10.1.1.2/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== build ==&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 512m&lt;br /&gt;
swap 1G&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr 5g&lt;br /&gt;
/mnt/data1 ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=nat2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyd0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyd0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on  secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup3&lt;br /&gt;
&amp;lt;pre&amp;gt;cd&lt;br /&gt;
ssh-keygen -t dsa -b 1024&amp;lt;/pre&amp;gt; &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup3 and backup 2 without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup3 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
alias mbm       mb mount&lt;br /&gt;
alias mbu       mb umount&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
make install clean; rehash; mail -s &#039;cvs installed&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure new kernel. &lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/i386/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/nat2-6.4 ./nat2&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
make installworld &lt;br /&gt;
mergemaster -i&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;nat2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 10.1.6.50 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em0_alias0=&amp;quot;inet 69.55.229.229 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 69.55.229.2 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_fxp0_alias0=&amp;quot;inet 69.55.229.3 netmask 255.255.255.255&amp;quot;&lt;br /&gt;
ifconfig_fxp1=&amp;quot;inet 10.1.2.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.6.1&amp;quot;&lt;br /&gt;
#defaultrouter=&amp;quot; 66.181.14.250&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.1&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_6_4\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; dave.boodman@vtext.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
fetch http://3ware.com/download/Escalade9690SA-Series/9.5.3/tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
tar xzf tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86-9.5.3.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net/rsync&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/lang/perl5.8&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install screen from ports&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/sysutils/screen&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&amp;lt;pre&amp;gt;adduser&lt;br /&gt;
Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb&lt;br /&gt;
scp backup2:/mnt/data4/build/bb/bb-freebsd.tar .&lt;br /&gt;
tar xvf bb-freebsd.tar&amp;lt;/pre&amp;gt;&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
10.1.2.1 nat2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
MACHINE=&amp;quot;nat2,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&lt;br /&gt;
&lt;br /&gt;
cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&lt;br /&gt;
make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
vi /usr/home/bb/bbc1.9e-btf/bin/bb-cpu.sh&lt;br /&gt;
        $1 $TOPARGS &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
#        /usr/local/jail/bin/jtop &amp;gt; $BBTMP/TOP.$$&lt;br /&gt;
&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Punch a hole in the firewall to allow it to communicate with bb monitor (probably already exists):&lt;br /&gt;
&lt;br /&gt;
 ipfw add 96 allow ip from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
64.163.14.48 nat2.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;server 69.55.230.2&lt;br /&gt;
server 0.pool.ntp.org&lt;br /&gt;
server 1.pool.ntp.org&lt;br /&gt;
server 2.pool.ntp.org&lt;br /&gt;
server 3.pool.ntp.org&lt;br /&gt;
server 66.187.233.4&lt;br /&gt;
server 217.204.76.170&lt;br /&gt;
server 64.112.189.11&lt;br /&gt;
server 66.69.112.130&lt;br /&gt;
server 80.85.129.25&lt;br /&gt;
server 80.237.234.15&lt;br /&gt;
server 130.60.7.44&lt;br /&gt;
server 134.99.176.3&lt;br /&gt;
server 198.144.202.250&lt;br /&gt;
server 202.74.170.194&lt;br /&gt;
server 204.17.42.199&lt;br /&gt;
server 204.87.183.6&lt;br /&gt;
server 213.15.3.1&lt;br /&gt;
server 213.239.178.33&lt;br /&gt;
server 217.114.97.97&lt;br /&gt;
server 69.55.230.2&amp;quot; &amp;gt; /etc/ntp.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -A -p /var/run/ntpd.pid &lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
 vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups, nfs mount&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /backup3&lt;br /&gt;
echo &#039;backup3:/data           /backup3        nfs     rw,bg           0       0&#039; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/nat2/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on backup3:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/nat2/current&lt;br /&gt;
&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp 69.55.230.2:/usr/local/etc/rsync.backup /usr/local/etc/rsync.backup &lt;br /&gt;
vi /usr/local/etc/rsync.backup &lt;br /&gt;
backup1 &amp;gt; backup3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 66.181.18.1&lt;br /&gt;
ListenAddress 69.55.229.2&lt;br /&gt;
ListenAddress 10.1.2.1&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* raid chk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/lsiraidchk&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
my @out = split &amp;quot;\n&amp;quot;, `megarc -ldInfo -a0 -Lall|grep Status:`;&lt;br /&gt;
&lt;br /&gt;
foreach (@out) {&lt;br /&gt;
    if ($_ =~ /DEGRADED/) { $date = `date`; chomp $date; `echo &amp;quot;$date: RAID ARRAY DEGRADED&amp;quot; &amp;gt;&amp;gt; /var/log/messages`; }&lt;br /&gt;
#print $_;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* netflow stuff&lt;br /&gt;
add crontab entries&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
30 3 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
0 0 1 * * /sbin/ipfw del 3 4 5&lt;br /&gt;
59 23 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
3 0 30 * * /sbin/ipfw show &amp;gt; /tmp/ipfw_count&lt;br /&gt;
0 3 * * * /etc/makefwrules.pl; /etc/makepiperules.pl; &lt;br /&gt;
*/5 * * * * /usr/local/sbin/lsiraidchk&lt;br /&gt;
&lt;br /&gt;
#10 0 * * * rm /var/spool/clientmqueue/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /etc/makefwrules.pl user@64.163.14.48:~&lt;br /&gt;
scp /etc/makepiperules.pl user@64.163.14.48:~&lt;br /&gt;
mv /home/user/makefwrules.pl /etc&lt;br /&gt;
mv /home/user/makepiperules.pl /etc&lt;br /&gt;
touch /etc/firewall.sh&lt;br /&gt;
mkdir /etc/oldrules/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other binaries&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/rulemaker user@64.163.14.48:~&lt;br /&gt;
mv ~user/rulemaker /usr/local/sbin&lt;br /&gt;
scp ~user/Sendmail.pm user@64.163.14.48:~&lt;br /&gt;
scp ~user/doswatch.pl user@64.163.14.48:~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add nat rules&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ipnat.rules&lt;br /&gt;
# sample entry&lt;br /&gt;
bimap fxp0 10.1.6.70/32 -&amp;gt; 10.1.6.59/32&lt;br /&gt;
#bimap fxp0 10.1.4.208/32 -&amp;gt; 69.55.233.196/32&lt;br /&gt;
&lt;br /&gt;
ipnat -C -f /etc/ipnat.rules&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* shell for user&lt;br /&gt;
&amp;lt;pre&amp;gt;cp /root/.cshrc ~user/&lt;br /&gt;
vi ~user/&amp;lt;/pre&amp;gt;&lt;br /&gt;
change # to $&lt;br /&gt;
&lt;br /&gt;
* mrtg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/mrtg&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
(no FONTCONFIG, v3)&lt;br /&gt;
&lt;br /&gt;
this didn&#039;t work cause of libtool incompat&lt;br /&gt;
&lt;br /&gt;
so manually moved files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp /usr/local/bin/cfgmaker user@nat2:/usr/local/bin/cfgmaker&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/MRTG_lib.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_util.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/BER.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/SNMP_Session.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/&lt;br /&gt;
scp /usr/local/bin/mrtg root@nat2:/usr/local/bin/mrtg&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/locales_mrtg.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/locales_mrtg.pm&lt;br /&gt;
scp /usr/local/bin/rrdtool root@nat2:/usr/local/bin/rrdtool&lt;br /&gt;
scp /usr/local/lib/perl5/site_perl/5.6.1/mach/RRDs.pm root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/RRDs.pm&lt;br /&gt;
rsync -av /usr/local/lib/perl5/site_perl/5.6.1/mach/auto/RRDs/ root@nat2:/usr/local/lib/perl5/site_perl/5.8.9/mach/auto/RRDs/&lt;br /&gt;
scp /usr/lib/libz.so.2 root@nat2:/usr/lib/libz.so.2&lt;br /&gt;
scp /usr/lib/libm.so.2 root@nat2:/usr/lib/libm.so.2&lt;br /&gt;
rsync -av /usr/local/lib/librrd* root@nat2:/usr/local/lib/&lt;br /&gt;
scp /usr/lib/libc.so.4 root@nat2:/usr/lib/libc.so.4&lt;br /&gt;
&lt;br /&gt;
rsync -av /usr/ports/net/rrdtool root@nat2:/usr/ports/net&lt;br /&gt;
cd /usr/ports/net/rrdtool&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
mkdir -p /mnt/data1/mrtg/data&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/template.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
scp /usr/local/www/mgmt/mrtg/host.pl root@nat2:/mnt/data1/mrtg/&lt;br /&gt;
&lt;br /&gt;
cfgmaker --if-template=template.pl --show-op-down --global &amp;quot;options[_]: growright,bits&amp;quot; --global &#039;WorkDir: /mnt/data1/mrtg/data&#039; --global &#039;Interval: 1&#039; --global &#039;LogFormat: rrdtool&#039; --global &#039;PathAdd: /usr/local/bin&#039; --global &#039;LibAdd: /usr/local/lib&#039; --host-template=host.pl jc292401@10.1.2.50 --output=switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
/usr/local/bin/mrtg /mnt/data1/mrtg/switch-p20.cfg&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /mnt/data1/mrtg/mrtg.sh&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
* * * * * /mnt/data1/mrtg/mrtg.sh 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* snmp firewall block&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 10 allow udp from 69.55.230.2 to any 161&lt;br /&gt;
ipfw add 10 allow udp from 10.1.2.1 to any 161&lt;br /&gt;
ipfw add 11 deny udp from any to any 161&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/boot.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= bwdb =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at castle. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 4.10 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.203 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 1U. Single power supply. &lt;br /&gt;
* Drives: one 250 GB (2 x 250GB) RAID1 array running on a Promise IDE RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* mysql&lt;br /&gt;
* bigbrother &lt;br /&gt;
* snmp&lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, inserting the data into the local mysql database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
The database storing all the traffic data is named &amp;lt;tt&amp;gt;traffic&amp;lt;/tt&amp;gt;&lt;br /&gt;
Tables:&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; show tables;&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| Tables_in_traffic         |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| dailyIpTotals_69_55_224   |&lt;br /&gt;
| dailyIpTotals_69_55_225   |&lt;br /&gt;
| dailyIpTotals_69_55_226   |&lt;br /&gt;
| dailyIpTotals_69_55_227   |&lt;br /&gt;
| dailyIpTotals_69_55_228   |&lt;br /&gt;
| dailyIpTotals_69_55_229   |&lt;br /&gt;
| dailyIpTotals_69_55_230   |&lt;br /&gt;
| dailyIpTotals_69_55_231   |&lt;br /&gt;
| dailyIpTotals_69_55_232   |&lt;br /&gt;
| dailyIpTotals_69_55_233   |&lt;br /&gt;
| dailyIpTotals_69_55_234   |&lt;br /&gt;
| dailyIpTotals_69_55_235   |&lt;br /&gt;
| dailyIpTotals_69_55_236   |&lt;br /&gt;
| dailyIpTotals_69_55_237   |&lt;br /&gt;
| dailyIpTotals_69_55_238   |&lt;br /&gt;
| dailyIpTotals_69_55_239   |&lt;br /&gt;
| dailyPortTotals_69_55_224 |&lt;br /&gt;
| dailyPortTotals_69_55_225 |&lt;br /&gt;
| dailyPortTotals_69_55_226 |&lt;br /&gt;
| dailyPortTotals_69_55_227 |&lt;br /&gt;
| dailyPortTotals_69_55_228 |&lt;br /&gt;
| dailyPortTotals_69_55_229 |&lt;br /&gt;
| dailyPortTotals_69_55_230 |&lt;br /&gt;
| dailyPortTotals_69_55_231 |&lt;br /&gt;
| dailyPortTotals_69_55_232 |&lt;br /&gt;
| dailyPortTotals_69_55_233 |&lt;br /&gt;
| dailyPortTotals_69_55_234 |&lt;br /&gt;
| dailyPortTotals_69_55_235 |&lt;br /&gt;
| dailyPortTotals_69_55_236 |&lt;br /&gt;
| dailyPortTotals_69_55_237 |&lt;br /&gt;
| dailyPortTotals_69_55_238 |&lt;br /&gt;
| dailyPortTotals_69_55_239 |&lt;br /&gt;
| ipTotals_69_55_224        |&lt;br /&gt;
| ipTotals_69_55_225        |&lt;br /&gt;
| ipTotals_69_55_226        |&lt;br /&gt;
| ipTotals_69_55_227        |&lt;br /&gt;
| ipTotals_69_55_228        |&lt;br /&gt;
| ipTotals_69_55_229        |&lt;br /&gt;
| ipTotals_69_55_230        |&lt;br /&gt;
| ipTotals_69_55_231        |&lt;br /&gt;
| ipTotals_69_55_232        |&lt;br /&gt;
| ipTotals_69_55_233        |&lt;br /&gt;
| ipTotals_69_55_234        |&lt;br /&gt;
| ipTotals_69_55_235        |&lt;br /&gt;
| ipTotals_69_55_236        |&lt;br /&gt;
| ipTotals_69_55_237        |&lt;br /&gt;
| ipTotals_69_55_238        |&lt;br /&gt;
| ipTotals_69_55_239        |&lt;br /&gt;
| portTotals_69_55_224      |&lt;br /&gt;
| portTotals_69_55_225      |&lt;br /&gt;
| portTotals_69_55_226      |&lt;br /&gt;
| portTotals_69_55_227      |&lt;br /&gt;
| portTotals_69_55_228      |&lt;br /&gt;
| portTotals_69_55_229      |&lt;br /&gt;
| portTotals_69_55_230      |&lt;br /&gt;
| portTotals_69_55_231      |&lt;br /&gt;
| portTotals_69_55_232      |&lt;br /&gt;
| portTotals_69_55_233      |&lt;br /&gt;
| portTotals_69_55_234      |&lt;br /&gt;
| portTotals_69_55_235      |&lt;br /&gt;
| portTotals_69_55_236      |&lt;br /&gt;
| portTotals_69_55_237      |&lt;br /&gt;
| portTotals_69_55_238      |&lt;br /&gt;
| portTotals_69_55_239      |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So as you see we store each class-C block in its own table, for efficiency. Further, we store and organize data in 4 ways: &amp;quot;daily&amp;quot; tables and 15-minute granularity tables, and for each of those we track simple IP traffic and port-specific traffic. The daily tables contains 2 entries (one for each direction) for each IP for each day. For the current day, the row data is incremented as the day goes on. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyIpTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(23) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(12)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyIpTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 6955224194-20100917-1&lt;br /&gt;
     date: 2010-09-17&lt;br /&gt;
       ip: 69.55.224.194&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 8821&lt;br /&gt;
  packets: 91&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;id&amp;lt;/tt&amp;gt; is a unique identifier (key), &amp;lt;tt&amp;gt;direction&amp;lt;/tt&amp;gt; indicates incoming or outgoing traffic (outbound = 2, inbound = 1), &amp;lt;tt&amp;gt;octets&amp;lt;/tt&amp;gt; are the amount of traffic in kilobytes, and &amp;lt;tt&amp;gt;packets&amp;lt;/tt&amp;gt; is the total number of packets.&lt;br /&gt;
&lt;br /&gt;
The 15-minute table has similar information, but it&#039;s organized in 15 minute increments:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe ipTotals_69_55_224;&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type       | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
| date      | datetime   | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | char(15)   | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1) | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(20) | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)    | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+------------+------+-----+---------+-------+&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from ipTotals_69_55_224 limit 2\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.13&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 288&lt;br /&gt;
  packets: 6&lt;br /&gt;
*************************** 2. row ***************************&lt;br /&gt;
     date: 2010-01-11 19:30:00&lt;br /&gt;
       ip: 69.55.224.12&lt;br /&gt;
direction: 1&lt;br /&gt;
   octets: 216&lt;br /&gt;
  packets: 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So for a given IP, there will be 192 rows in a given day: 4 rows per hour, *2 for 2 directions, *24 for 24hours in a day. Obviously this table is large which is why we broke it down into a daily table for quick, easy, daily-summary access.&lt;br /&gt;
&lt;br /&gt;
That covers the simple traffic tabulation tables. We also track traffic by port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mysql&amp;gt; describe dailyPortTotals_69_55_224;&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| Field     | Type        | Null | Key | Default | Extra |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
| id        | varchar(28) |      | PRI |         |       |&lt;br /&gt;
| date      | date        | YES  |     | NULL    |       |&lt;br /&gt;
| ip        | varchar(15) | YES  | MUL | NULL    |       |&lt;br /&gt;
| direction | tinyint(1)  | YES  |     | NULL    |       |&lt;br /&gt;
| protocol  | smallint(3) | YES  |     | NULL    |       |&lt;br /&gt;
| port      | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
| octets    | bigint(11)  | YES  |     | NULL    |       |&lt;br /&gt;
| packets   | int(11)     | YES  |     | NULL    |       |&lt;br /&gt;
+-----------+-------------+------+-----+---------+-------+&lt;br /&gt;
8 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from dailyPortTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
       id: 695522496-20091218-1-6-23&lt;br /&gt;
     date: 2009-12-18&lt;br /&gt;
       ip: 69.55.224.96&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 23&lt;br /&gt;
   octets: 1796&lt;br /&gt;
  packets: 30&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select * from portTotals_69_55_224 limit 1\G&lt;br /&gt;
*************************** 1. row ***************************&lt;br /&gt;
     date: 2010-09-07 18:45:00&lt;br /&gt;
       ip: 69.55.224.254&lt;br /&gt;
direction: 1&lt;br /&gt;
 protocol: 6&lt;br /&gt;
     port: 99999&lt;br /&gt;
   octets: 144&lt;br /&gt;
  packets: 3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is largely the same with 2 more additions: &amp;lt;tt&amp;gt;protocol&amp;lt;/tt&amp;gt; (1=ICMP, 6=TCP, 17=UDP), and &amp;lt;tt&amp;gt;port&amp;lt;/tt&amp;gt; which we set to 99999 if the traffic is return traffic and the port is above 1024. Obviously the potential for number of rows grows quickly when you consider the addition of port and protocol tracking per IP.&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
* archive data from database&lt;br /&gt;
 archive_daily.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the daily summary tables. Generally we want to have a year of history in the database.&lt;br /&gt;
&lt;br /&gt;
 archive_15min.pl 2012 09&lt;br /&gt;
This will archive data for the given year and month from the 15min-increment tables. Generally, we want to have 6 months of history in the database.&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move flow files and exported data to a backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/usr/home/exported&amp;lt;/tt&amp;gt;, respectively&lt;br /&gt;
&lt;br /&gt;
== Slaving ==&lt;br /&gt;
&lt;br /&gt;
If we were going to setup traffic database slaving (we don&#039;t do this anymore), perhaps cause the bwdb machine gets busy and it cannot handle traffic requests and netflow, here&#039;s how it&#039;s done:&lt;br /&gt;
&lt;br /&gt;
On the traffic master:&lt;br /&gt;
&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.* TO &#039;repl&#039;@&#039;10.1.4.8&#039; IDENTIFIED BY &#039;qERUG8wf&#039;;&lt;br /&gt;
&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;bin-log&lt;br /&gt;
server-id=1&lt;br /&gt;
max_binlog_size=500M&lt;br /&gt;
expire_logs_days = 3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
in my.cnf:&lt;br /&gt;
&amp;lt;pre&amp;gt;server-id       = 2&lt;br /&gt;
master-host     =   10.1.4.203&lt;br /&gt;
master-user     =   repl&lt;br /&gt;
master-password =   qERUG8wf&lt;br /&gt;
master-connect-retry=60&lt;br /&gt;
replicate-wild-do-table=traffic.daily%&lt;br /&gt;
max_relay_log_size=500M&lt;br /&gt;
expire_logs_days = 3&lt;br /&gt;
&lt;br /&gt;
replicate-wild-do-table=traffic.%&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on master:&lt;br /&gt;
 touch /usr/home/working/.lock&lt;br /&gt;
(make sure processflows not running)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
cd /usr/home/database/traffic&lt;br /&gt;
tar -czf mysql-traffic-snapshot.tgz ./daily*&lt;br /&gt;
(~1G)&lt;br /&gt;
SHOW MASTER STATUS;&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| File            | Position  | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
| bwdb-bin.000039 | 154432615 |              |                  |&lt;br /&gt;
+-----------------+-----------+--------------+------------------+&lt;br /&gt;
&lt;br /&gt;
(write down info)&lt;br /&gt;
UNLOCK TABLES;&lt;br /&gt;
scp mysql-traffic-snapshot.tgz 10.1.4.5:/mnt/data1/db/mysql/traffic/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /mnt/data1/db/mysql/traffic&lt;br /&gt;
cd /mnt/data1/db/mysql/traffic/&lt;br /&gt;
tar xzvf mysql-traffic-snapshot.tgz&lt;br /&gt;
(restart mysql)&lt;br /&gt;
CHANGE MASTER TO MASTER_HOST=&#039;10.1.4.203&#039;,MASTER_USER=&#039;repl&#039;,MASTER_PASSWORD=&#039;qERUG8wf&#039;,MASTER_LOG_FILE=&#039;bwdb-bin.000059&#039;,MASTER_LOG_POS=482502186;&lt;br /&gt;
START SLAVE;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/database/traffic&lt;br /&gt;
scp *&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;optimize table dailyPortTotals_69_55_224;&lt;br /&gt;
optimize table dailyPortTotals_69_55_225;&lt;br /&gt;
optimize table dailyPortTotals_69_55_226;&lt;br /&gt;
optimize table dailyPortTotals_69_55_227;&lt;br /&gt;
optimize table dailyPortTotals_69_55_228;&lt;br /&gt;
optimize table dailyPortTotals_69_55_229;&lt;br /&gt;
optimize table dailyPortTotals_69_55_230;&lt;br /&gt;
optimize table dailyPortTotals_69_55_231;&lt;br /&gt;
optimize table dailyPortTotals_69_55_232;&lt;br /&gt;
optimize table dailyPortTotals_69_55_233;&lt;br /&gt;
optimize table dailyPortTotals_69_55_234;&lt;br /&gt;
optimize table dailyPortTotals_69_55_235;&lt;br /&gt;
optimize table dailyPortTotals_69_55_236;&lt;br /&gt;
optimize table dailyPortTotals_69_55_237;&lt;br /&gt;
optimize table dailyPortTotals_69_55_238;&lt;br /&gt;
optimize table dailyPortTotals_69_55_239;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&lt;br /&gt;
Install FreeBSD 8.3 amd64&lt;br /&gt;
&lt;br /&gt;
* partition map:&lt;br /&gt;
&amp;lt;pre&amp;gt;/ 500m&lt;br /&gt;
swap 2048m&lt;br /&gt;
/var 256m&lt;br /&gt;
/tmp 256m&lt;br /&gt;
/usr ~&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* edit /etc/make.conf &lt;br /&gt;
Castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;WITHOUT_X11=yes \&lt;br /&gt;
KERNCONF=bwdb2 \&lt;br /&gt;
BOOT_COMCONSOLE_SPEED=115200&amp;quot; &amp;gt;&amp;gt; /etc/make.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* add settings to /boot/loader.conf and /boot.config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;-Dh&amp;quot; &amp;gt;&amp;gt; /boot.config&lt;br /&gt;
&lt;br /&gt;
echo &#039;console=&amp;quot;comconsole,vidconsole&amp;quot; \&lt;br /&gt;
boot_multicons=&amp;quot;YES&amp;quot; \&lt;br /&gt;
boot_serial=&amp;quot;YES&amp;quot; \&lt;br /&gt;
comconsole_speed=&amp;quot;115200&amp;quot;&#039; &amp;gt;&amp;gt; /boot/loader.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* turn off all ttyv&#039;s except 0 and 1 in /etc/ttys&lt;br /&gt;
also turn on ttyu0, change type to vt100:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ttys&lt;br /&gt;
&lt;br /&gt;
ttyv2   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv3   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv4   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv5   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv6   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
ttyv7   &amp;quot;/usr/libexec/getty Pc&amp;quot;         cons25  off secure&lt;br /&gt;
# Serial terminals&lt;br /&gt;
# The &#039;dialup&#039; keyword identifies dialin lines to login, fingerd etc.&lt;br /&gt;
ttyu0   &amp;quot;/usr/libexec/getty std.9600&amp;quot;   vt100   on secure&lt;br /&gt;
&lt;br /&gt;
kill -1 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on console server:&lt;br /&gt;
 vi /etc/remote&lt;br /&gt;
(rename port to jail8 depending on where and which digi plugged into)&lt;br /&gt;
test serial console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* populate hosts&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;10.1.4.3 backup2 backup2.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.4.8 backup1 backup1.johncompanies.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* put key in authorized_keys on backup1 and  backup2&lt;br /&gt;
 cd&lt;br /&gt;
 ssh-keygen -t dsa -b 1024 &lt;br /&gt;
(default location, leave password blank)&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh backup3 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
confirm that you can ssh to backup2 and backup1 (and backup3 if at i2b) without getting a login prompt&lt;br /&gt;
&lt;br /&gt;
 ssh backup1 hostname&lt;br /&gt;
 ssh backup2 hostname&lt;br /&gt;
&lt;br /&gt;
* edit root&#039;s path and login script:&lt;br /&gt;
 vi /root/.cshrc&lt;br /&gt;
&lt;br /&gt;
Change alias entries (add G):&lt;br /&gt;
&amp;lt;pre&amp;gt;alias la        ls -aG&lt;br /&gt;
alias lf        ls -FAG&lt;br /&gt;
alias ll        ls -lAG&lt;br /&gt;
alias ls        ls -AG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and alter the prompt, set the following:&lt;br /&gt;
 set prompt = &amp;quot;`/bin/hostname -s` %/# &amp;quot;&lt;br /&gt;
&lt;br /&gt;
* install cvsup&lt;br /&gt;
 cd /usr/ports/net/cvsup-without-gui &lt;br /&gt;
 make install clean; rehash; mail -s &#039;cvs installed&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
&lt;br /&gt;
* get latest sources for this release:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src &lt;br /&gt;
echo &amp;quot;*default host=cvsup4.freebsd.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
src-all&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup ; mail -s &#039;cvs sup done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure new kernel&lt;br /&gt;
&lt;br /&gt;
 cd /usr/src/sys/amd64/conf &lt;br /&gt;
 scp backup2:/mnt/data4/build/freebsd/kern_config-bwdb-8.3-amd64 ./bwdb&lt;br /&gt;
&lt;br /&gt;
Edit config and change name:&lt;br /&gt;
 vi bwdb&lt;br /&gt;
 ident  bwdb&lt;br /&gt;
&lt;br /&gt;
* build, install kernel and world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /boot&lt;br /&gt;
&lt;br /&gt;
mv kernel kernel.GENERIC&lt;br /&gt;
cd kernel.GENERIC&lt;br /&gt;
cd /usr/src&lt;br /&gt;
make buildkernel installkernel&lt;br /&gt;
&lt;br /&gt;
make buildworld ; mail -s &#039;buildworld done&#039; support@johncompanies.com &amp;lt; /dev/null&lt;br /&gt;
(2450: 1:56min, supermicro: 59mins, 2950: 38mins)&lt;br /&gt;
make installworld &lt;br /&gt;
(2450: 3min, supermicro: 1min, 2950: :34)&lt;br /&gt;
mergemaster -i&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* populate /etc/rc.conf with IPs and NFS settings&lt;br /&gt;
&lt;br /&gt;
castle:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.4.203 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.4.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.4.203&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i2b:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.conf&lt;br /&gt;
&lt;br /&gt;
hostname=&amp;quot;bwdb2.johncompanies.com&amp;quot;&lt;br /&gt;
kern_securelevel_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
portmap_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
usbd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_client_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
nfs_reserved_port_only=&amp;quot;YES&amp;quot;&lt;br /&gt;
ifconfig_fxp0=&amp;quot;inet 10.1.2.4 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;up promisc&amp;quot;&lt;br /&gt;
defaultrouter=&amp;quot;10.1.2.1&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inetd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_flags=&amp;quot;-wW -a 10.1.2.4&amp;quot;&lt;br /&gt;
fsck_y_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
background_fsck=&amp;quot;NO&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
ipfw_load=&amp;quot;YES&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* reboot. Confirm new kernel is loaded&lt;br /&gt;
&lt;br /&gt;
 uname -a&lt;br /&gt;
&lt;br /&gt;
* update ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports&lt;br /&gt;
echo &amp;quot;*default host=cvsup4.FreeBSD.org\&lt;br /&gt;
*default base=/usr\&lt;br /&gt;
*default prefix=/usr\&lt;br /&gt;
*default release=cvs tag=RELENG_8_3\&lt;br /&gt;
*default delete use-rel-suffix\&lt;br /&gt;
*default compress\&lt;br /&gt;
ports-all tag=.&amp;quot; &amp;gt; sup&lt;br /&gt;
&lt;br /&gt;
cvsup sup; mail -s &#039;cvs sup ports done&#039; support@johncompanies.com &amp;lt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install raid mgmt tool&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/local/sbin&lt;br /&gt;
scp backup2:/d4/build/3ware/tw_cli-freebsd-x86_64-9.5.0.1.tgz .&lt;br /&gt;
tar xzf tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
rm tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
chmod 0700 tw_cli&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test:&lt;br /&gt;
 ./tw_cli info c0&lt;br /&gt;
&lt;br /&gt;
Grab raid check script:&lt;br /&gt;
 scp backup1:/usr/local/sbin/3wraidchk /usr/local/etc&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
*/5 * * * * /usr/local/etc/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* install rsync from ports&lt;br /&gt;
 cd /usr/ports/net/rsync&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install perl from ports&lt;br /&gt;
 cd /usr/ports/lang/perl5.8&lt;br /&gt;
 make install clean&lt;br /&gt;
&lt;br /&gt;
choose default options&lt;br /&gt;
&lt;br /&gt;
* install bb client&lt;br /&gt;
&lt;br /&gt;
Compiling from source on AMD64 will not work. So, we use a linux-compiled version and rely on linux compat. Linux compat won&#039;t install on 8.x - libtool 2.4 need. So, instead we copy(ed) over linux: &lt;br /&gt;
 rsync -aSHv --exclude=proc --exclude=sys 10.1.4.108:/usr/compat/linux/ /usr/compat/linux/&lt;br /&gt;
&lt;br /&gt;
 adduser&lt;br /&gt;
&lt;br /&gt;
Output/response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Username: bb&lt;br /&gt;
Full name: bb&lt;br /&gt;
Uid (Leave empty for default): 1984&lt;br /&gt;
Login group [bb]:&lt;br /&gt;
Login group is bb. Invite bb into other groups? []:&lt;br /&gt;
Login class [default]:&lt;br /&gt;
Shell (sh csh tcsh nologin) [sh]: &lt;br /&gt;
Home directory [/home/bb]:&lt;br /&gt;
Use password-based authentication? [yes]:&lt;br /&gt;
Use an empty password? (yes/no) [no]:&lt;br /&gt;
Use a random password? (yes/no) [no]: yes&lt;br /&gt;
Lock out the account after creation? [no]:&lt;br /&gt;
Username   : bb&lt;br /&gt;
Password   : &amp;lt;random&amp;gt;&lt;br /&gt;
Full Name  : bb&lt;br /&gt;
Uid        : 1984&lt;br /&gt;
Class      :&lt;br /&gt;
Groups     : bb&lt;br /&gt;
Home       : /home/bb&lt;br /&gt;
Shell      : /bin/sh&lt;br /&gt;
Locked     : no&lt;br /&gt;
OK? (yes/no): yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cd /usr/home/bb&lt;br /&gt;
 scp backup2:/mnt/data4/build/bb/bb-freebsd_linuxcompat.tgz .&lt;br /&gt;
 tar xzf bb-freebsd_linuxcompat.tgz&lt;br /&gt;
&lt;br /&gt;
edit /home/bb/bbc1.9e-btf/etc/bb-hosts with something like:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;10.1.4.5 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.4.203 bwdb.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Edit for machine name and private IP.&lt;br /&gt;
&lt;br /&gt;
if this machine is at i2b:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh \&lt;br /&gt;
 10.1.2.4 bwdb2.johncompanies.com # ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /home/bb/bbc1.9e-btf/ext/openfiles &lt;br /&gt;
&lt;br /&gt;
MACHINE=&amp;quot;bwdb,johncompanies,com&amp;quot;      # HAS TO BE IN A,B,C FORM&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for machine name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/home/bb/bbc1.9e-btf/etc&lt;br /&gt;
./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT &lt;br /&gt;
(look for errors)&lt;br /&gt;
exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put in script to start bb @ boot:&lt;br /&gt;
 echo &#039;su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&#039; &amp;gt; /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
 chmod +x /usr/local/etc/rc.d/bb.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this is at i2b, punch a hole in the firewall to allow it to communicate with bb monitor:&lt;br /&gt;
&lt;br /&gt;
ipfw add 00096 allow tcp from 66.181.18.0/27 to 69.55.230.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* configure bb on mail&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /usr/home/bb/bbsrc/bb1.9e-btf/etc/bb-hosts&lt;br /&gt;
10.1.4.203 bwdb.johncompanies.com # ssh&lt;br /&gt;
&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
bbsrc/bb/runbb.sh restart ; exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* configure ntp server&lt;br /&gt;
Castle:&lt;br /&gt;
 echo &amp;quot;server 10.1.4.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
 echo &amp;quot;server 10.1.2.1&amp;quot; &amp;gt; /etc/ntp.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/ntpd -p /var/run/ntpd.pid&lt;br /&gt;
sleep 2; ntpq -p&amp;lt;/pre&amp;gt;&lt;br /&gt;
(confirm it’s able to reach our time server)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &#039;/usr/sbin/ntpd -c /etc/ntp.conf -p /var/run/ntpd.pid -f /var/db/ntpd.drift&#039; &amp;gt; /usr/local/etc/rc.d/ntp.sh&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/ntp.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* fwd and reverse lookups on ns1c&lt;br /&gt;
vr johncompanies.com&lt;br /&gt;
 (edit the PTR too)&lt;br /&gt;
&lt;br /&gt;
* setup backups&lt;br /&gt;
echo &#039;#\!/bin/sh\&lt;br /&gt;
backupdir=/data/bwdb/current\&lt;br /&gt;
\&lt;br /&gt;
## ENTRY /etc &#039; &amp;gt; /usr/local/etc/backup.config&lt;br /&gt;
&lt;br /&gt;
Castle:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup1 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup1, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
I2b:&lt;br /&gt;
setup backup dirs:&lt;br /&gt;
 ssh backup3 mkdir -p /data/bwdb/current&lt;br /&gt;
on backup3, add the system to &lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Copy over the backup script:&lt;br /&gt;
 scp backup2:/d4/bin/freebsd8.x/rsync.backup /usr/local/etc/&lt;br /&gt;
&lt;br /&gt;
Edit rsync.backup and change &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; var to point to correct config file location: &amp;lt;tt&amp;gt;/usr/local/etc/backup.config&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
5 0 * * * /usr/local/etc/rsync.backup&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* make /root/logs&lt;br /&gt;
 mkdir /root/logs&lt;br /&gt;
&lt;br /&gt;
* edit sshd_config for security&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ssh/sshd_config&lt;br /&gt;
ListenAddress 10.1.4.203&lt;br /&gt;
PermitRootLogin yes&lt;br /&gt;
&lt;br /&gt;
kill -1 `cat /var/run/sshd.pid`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
=== netflow ===&lt;br /&gt;
&lt;br /&gt;
Install flow tools:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/net-mgmt/flow-tools&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults.&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/flows&lt;br /&gt;
&lt;br /&gt;
Flow start script:&lt;br /&gt;
 echo &amp;quot;/usr/local/bin/flow-capture -w /usr/home/flows -S5 -N -2 0/10.1.4.203/4444&amp;quot; &amp;gt; /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/flow-capture.sh&lt;br /&gt;
&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Netgraph start script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/local/etc/rc.d/netgraph.sh&lt;br /&gt;
&lt;br /&gt;
/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
mkpeer em0: netflow lower iface0&lt;br /&gt;
name em0:lower netflow&lt;br /&gt;
connect em0: netflow: upper out0&lt;br /&gt;
mkpeer netflow: ksocket export inet/dgram/udp&lt;br /&gt;
msg netflow:export connect inet/10.1.4.203:4444&lt;br /&gt;
SEQ&lt;br /&gt;
&lt;br /&gt;
#/usr/sbin/ngctl -f- &amp;lt;&amp;lt;-SEQ&lt;br /&gt;
#shutdown netflow:&lt;br /&gt;
#SEQ&lt;br /&gt;
&lt;br /&gt;
chmod 0700 /usr/local/etc/rc.d/netgraph.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit for private IP.&lt;br /&gt;
&lt;br /&gt;
Confirm netflow is running after running scripts:&lt;br /&gt;
&amp;lt;pre&amp;gt;newbwdb /usr/ports/net-mgmt/flow-tools# /usr/sbin/ngctl&lt;br /&gt;
Available commands:&lt;br /&gt;
  config     get or set configuration of node at &amp;lt;path&amp;gt;&lt;br /&gt;
  connect    Connects hook &amp;lt;peerhook&amp;gt; of the node at &amp;lt;relpath&amp;gt; to &amp;lt;hook&amp;gt;&lt;br /&gt;
  debug      Get/set debugging verbosity level&lt;br /&gt;
  dot        Produce a GraphViz (.dot) of the entire netgraph.&lt;br /&gt;
  help       Show command summary or get more help on a specific command&lt;br /&gt;
  list       Show information about all nodes&lt;br /&gt;
  mkpeer     Create and connect a new node to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  msg        Send a netgraph control message to the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  name       Assign name &amp;lt;name&amp;gt; to the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  read       Read and execute commands from a file&lt;br /&gt;
  rmhook     Disconnect hook &amp;quot;hook&amp;quot; of the node at &amp;quot;path&amp;quot;&lt;br /&gt;
  show       Show information about the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  shutdown   Shutdown the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  status     Get human readable status information from the node at &amp;lt;path&amp;gt;&lt;br /&gt;
  types      Show information about all installed node types&lt;br /&gt;
  write      Send a data packet down the hook named by &amp;quot;hook&amp;quot;.&lt;br /&gt;
  quit       Exit program&lt;br /&gt;
+ show netflow:&lt;br /&gt;
  Name: netflow         Type: netflow         ID: 00000004   Num hooks: 3&lt;br /&gt;
  Local hook      Peer name       Peer type    Peer ID         Peer hook&lt;br /&gt;
  ----------      ---------       ---------    -------         ---------&lt;br /&gt;
  export          &amp;lt;unnamed&amp;gt;       ksocket      00000005        inet/dgram/udp&lt;br /&gt;
  out0            em0             ether        00000001        upper&lt;br /&gt;
  iface0          em0             ether        00000001        lower&lt;br /&gt;
+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== process flow tools ==== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir /usr/home/flowbin&lt;br /&gt;
mkdir /usr/home/working&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/devel/p5-Date-Calc&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/mail/p5-Mail-Sendmail&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queue script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/queue.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use date;&lt;br /&gt;
&lt;br /&gt;
my $flowbase = &amp;quot;/usr/home/flows&amp;quot;;&lt;br /&gt;
#my $flowqueue = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $flowqueue = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my ($date, $time) = date::CurrentDateTime();&lt;br /&gt;
&lt;br /&gt;
my $flowdir = mkFlowDir($date);&lt;br /&gt;
`mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
&lt;br /&gt;
if (date::DateWindow($date, $time, $date, &amp;quot;00:00:00&amp;quot;, 600)) {&lt;br /&gt;
    my $newdate = date::AddDays($date, -1);&lt;br /&gt;
    my $flowdir = mkFlowDir($newdate);&lt;br /&gt;
    `mv $flowdir/ft-* $flowqueue`;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub mkFlowDir {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    $date =~ /([0-9]{4}-[0-9]{2})/;&lt;br /&gt;
    my $yearmonth = $1;&lt;br /&gt;
    return &amp;quot;$flowbase/$yearmonth/$date&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date.pm module:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/date.pm&lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/date.pm,v 1.2 2003/11/24 17:06:02 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2001, 2002, 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# date.pl - Higher level functions written on top of Date::Calc&lt;br /&gt;
&lt;br /&gt;
package date;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use Date::Calc qw(:all);&lt;br /&gt;
&lt;br /&gt;
sub DayDiff { #calculate the difference in days from two dates&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my $diff = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    return $diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddDays { #adds specified number of days to the supplied date&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $days = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($nyear, $nmonth, $nday) = &amp;amp;Add_Delta_Days($year, $month, $day, $days);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($nyear, $nmonth, $nday);&lt;br /&gt;
    return $ndate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddHours { #adds specified number of hours to the supplied date and time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $addhours = shift;&lt;br /&gt;
    my $adddays = 0;&lt;br /&gt;
    if (abs($addhours / 24) &amp;gt;= 1) {&lt;br /&gt;
        $adddays = int($addhours / 24);&lt;br /&gt;
        $addhours -= $adddays * 24;&lt;br /&gt;
    }&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          $adddays, $addhours, 0, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub AddMinutes {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my $minutes = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($ny, $nm, $nd, $nh, $nmin, $ns) = &amp;amp;Add_Delta_DHMS($year, $month, $day,&lt;br /&gt;
                                                          $hour, $minute, $second,&lt;br /&gt;
                                                          0, 0, $minutes, 0);&lt;br /&gt;
    my $ndate = &amp;amp;ymdToDate($ny, $nm, $nd);&lt;br /&gt;
    my $ntime = &amp;amp;hmsToTime($nh, $nmin, $ns);&lt;br /&gt;
    return $ndate, $ntime;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CurrentDateTime { #return the current date and time&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    my $date = &amp;amp;ymdToDate($y, $m, $d);&lt;br /&gt;
    my $time = &amp;amp;hmsToTime($h, $min, $s);&lt;br /&gt;
    return $date, $time;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub Currentymd { #return the current year, month and day as separate variables&lt;br /&gt;
    my ($y, $m, $d, $h, $min, $s, $z, $z, $z) = &amp;amp;System_Clock;&lt;br /&gt;
    return $y, $m, $d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToymd { #takes a date and returns year, month, day as individual values&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    if ($date =~ /([0-9]{4})-([0-9]{2})-([0-9]{2})/) {&lt;br /&gt;
        my $day = $3;&lt;br /&gt;
        my $month = $2;&lt;br /&gt;
        my $year = $1;&lt;br /&gt;
        return $year, $month, $day;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub TimeTohms { #takes a time and return hours minutes and seconds as individual values&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    if ($time =~ /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/) {&lt;br /&gt;
        my $hour = $1;&lt;br /&gt;
        my $minute = $2;&lt;br /&gt;
        my $second = $3;&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return $hour, $minute, $second;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ymdToDate { #takes year, month, day and assembles them into our date format&lt;br /&gt;
    my $year = shift;&lt;br /&gt;
    my $month = shift;&lt;br /&gt;
    my $day = shift;&lt;br /&gt;
    if (defined($year) &amp;amp;&amp;amp; defined($month) &amp;amp;&amp;amp; defined ($day)) {&lt;br /&gt;
        $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
        $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
        return &amp;quot;$year-$month-$day&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub hmsToTime { #takes hour minute and second and assembles them into our time format&lt;br /&gt;
    my $hour = shift;&lt;br /&gt;
    my $minute = shift;&lt;br /&gt;
    my $second = shift;&lt;br /&gt;
    if (defined($hour) &amp;amp;&amp;amp; defined($minute) &amp;amp;&amp;amp; defined ($second)) {&lt;br /&gt;
        if ($hour !~ /[0-9]{2}/) { $hour = &amp;quot;0$hour&amp;quot;; }&lt;br /&gt;
        if ($minute !~ /[0-9]{2}/) { $minute = &amp;quot;0$minute&amp;quot;; }&lt;br /&gt;
        if ($second !~ /[0-9]{2}/) { $second = &amp;quot;0$second&amp;quot;; }&lt;br /&gt;
        return sprintf (&amp;quot;%02d:%02d:%02d&amp;quot;, $hour, $minute, $second);&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CompareDates { #compares two date and time pairs&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
#    &amp;amp;debug(&amp;quot;$year1, $month1, $day1, $year2, $month2, $day2&amp;quot;);&lt;br /&gt;
    my $days = &amp;amp;Delta_Days($year1, $month1, $day1, $year2, $month2, $day2);&lt;br /&gt;
    if ($days &amp;gt; 0) { return 1;}&lt;br /&gt;
    if ($days &amp;lt; 0) { return -1;}&lt;br /&gt;
    if ($days == 0) { #same day, compare times&lt;br /&gt;
        my $seconds1 = $second1 + (60 * $minute1) + (3600 * $hour1);&lt;br /&gt;
        my $seconds2 = $second2 + (60 * $minute2) + (3600 * $hour2);&lt;br /&gt;
        if ($seconds1 &amp;lt; $seconds2) { return 1;}&lt;br /&gt;
        if ($seconds1 &amp;gt; $seconds2) { return -1;}&lt;br /&gt;
        if ($seconds1 == $seconds2) { return 0;}&lt;br /&gt;
    }&lt;br /&gt;
    return undef;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateWindow { #compares two date time pairs to see if they are &amp;lt; X seconds apart&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $window = shift;&lt;br /&gt;
&lt;br /&gt;
    my ($year1, $month1, $day1) = &amp;amp;DateToymd($date1);&lt;br /&gt;
    my ($hour1, $minute1, $second1) = &amp;amp;TimeTohms($time1);&lt;br /&gt;
    my ($year2, $month2, $day2) = &amp;amp;DateToymd($date2);&lt;br /&gt;
    my ($hour2, $minute2, $second2) = &amp;amp;TimeTohms($time2);&lt;br /&gt;
&lt;br /&gt;
    my ($day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Delta_DHMS($year1, $month1, $day1, $hour1, $minute1, $second1,&lt;br /&gt;
                    $year2, $month2, $day2, $hour2, $minute2, $second2);&lt;br /&gt;
    $minute *= 60;&lt;br /&gt;
    $hour *= 3600;&lt;br /&gt;
    $day *= 86400;&lt;br /&gt;
    my $total = $second + $minute + $hour + $day;&lt;br /&gt;
    if (abs($total) &amp;lt; $window) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckDateOrder { #takes three dates/times, returns true if they are in chronological order&lt;br /&gt;
    my $date1 = shift;&lt;br /&gt;
    my $time1 = shift;&lt;br /&gt;
    my $date2 = shift;&lt;br /&gt;
    my $time2 = shift;&lt;br /&gt;
    my $date3 = shift;&lt;br /&gt;
    my $time3 = shift;&lt;br /&gt;
    if (&amp;amp;CompareDates($date1, $time1, $date2, $time2) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    if (&amp;amp;CompareDates($date2, $time2, $date3, $time3) == -1) {&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub EpochSeconds { #calculates number of seconds since the epoch for the given date/time&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my $time = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my ($hour, $minute, $second) = &amp;amp;TimeTohms($time);&lt;br /&gt;
    my ($d, $h, $m, $s) = &amp;amp;Delta_DHMS(1970, 1, 1, 0, 0, 0,&lt;br /&gt;
                                      $year, $month, $day, $hour, $minute, $second);&lt;br /&gt;
    my $seconds = $s + (60 * $m) + (3600 * $h) + (86400 * $d);&lt;br /&gt;
    return $seconds;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub SecondsToDateTime { #converts seconds since epoch to date/time&lt;br /&gt;
    my $seconds = shift;&lt;br /&gt;
    my $days = int($seconds / 86400);&lt;br /&gt;
    $seconds -= $days * 86400;&lt;br /&gt;
    my $hours = int($seconds / 3600);&lt;br /&gt;
    $seconds -= $hours * 3600;&lt;br /&gt;
    my $minutes = int($seconds / 60);&lt;br /&gt;
    $seconds -= $minutes * 60;&lt;br /&gt;
    my ($year, $month, $day, $hour, $minute, $second) =&lt;br /&gt;
        &amp;amp;Add_Delta_DHMS(1970, 1, 1, 0, 0, 0, $days, $hours, $minutes, $seconds);&lt;br /&gt;
    $month = sprintf(&amp;quot;%02d&amp;quot;, $month);&lt;br /&gt;
    $day = sprintf(&amp;quot;%02d&amp;quot;, $day);&lt;br /&gt;
    $hour = sprintf(&amp;quot;%02d&amp;quot;, $hour);&lt;br /&gt;
    $minute = sprintf(&amp;quot;%02d&amp;quot;, $minute);&lt;br /&gt;
    $second = sprintf(&amp;quot;%02d&amp;quot;, $second);&lt;br /&gt;
    return &amp;quot;$year-$month-$day&amp;quot;, &amp;quot;$hour:$minute:$second&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub DateToDayName {&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    my $name = &amp;amp;Day_of_Week_to_Text(&amp;amp;Day_of_Week($year, $month, $day));&lt;br /&gt;
    $name =~ /^[A-Za-z]{3}/;&lt;br /&gt;
    $name = $&amp;amp;;&lt;br /&gt;
    return $name;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub ValiDate {&lt;br /&gt;
    return @_;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub CheckBusinessDay { # checks to see if date is business day. 1=yes, 0=no&lt;br /&gt;
    my $date = shift;&lt;br /&gt;
    my ($year, $month, $day) = &amp;amp;DateToymd($date);&lt;br /&gt;
    if (Day_of_Week($year,$month,$day) &amp;lt; 6) { return 1; }&lt;br /&gt;
    else { return 0; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
1; #don&#039;t remove this line&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
Setup cronjob:&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#move flow data into the queue&lt;br /&gt;
1,16,31,46 * * * * /usr/home/flowbin/queue.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: i2b ==== &lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $sqldirworking = &amp;quot;/usr/home/sql/tmp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $outfile = &amp;quot;$1-$2:$3.sql&amp;quot;;&lt;br /&gt;
        unless (open (SQL, &amp;quot;+&amp;gt; $sqldirworking/$outfile&amp;quot;)) { die &amp;quot;cant open $sqldirworking/$outfile&amp;quot;; }&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; ($src_ip[2] == 229 || $src_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   #if ($src_ip[2] == 231) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                # note- this is where we filter out IPs only found at i2b&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; ($dst_ip[2] == 229 || $dst_ip[2] == 231)) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] == 229 || $ip[2] == 231) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        #print SQL &amp;quot;$date $ip $ddir $octets\n&amp;quot;;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                print SQL &amp;quot;$sql;\n&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
        close(SQL);&lt;br /&gt;
        `bzip2 $sqldirworking/$outfile`;&lt;br /&gt;
        `mv $sqldirworking/$outfile.bz2 $sqldir/`;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script sends the sql files to the traffic server for processing:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/sendsql.pl&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $remote = &amp;quot;69.55.233.199&amp;quot;;&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/sql&amp;quot;;&lt;br /&gt;
my $archive = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
my $sqldirremote = &amp;quot;/data/bwdb2/pending/&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /bz2$/;&lt;br /&gt;
&lt;br /&gt;
   my $r = `scp -Cq $sqldir/$file $remote:$sqldirremote 2&amp;gt;&amp;amp;1`;&lt;br /&gt;
#   print &amp;quot;scp $sqldir/$file $remote:$sqldirremote&amp;quot;;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;scp -Cq $sqldir/$file $remote:$sqldirremote ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `mv $sqldir/$file $archive`;&lt;br /&gt;
      `ssh $remote mv $sqldirremote/$file $sqldirremote/${file}.done`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com,dave@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
#move sql commands to traffic db&lt;br /&gt;
8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== flow processing: castle ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/processflows.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $log = &#039;/usr/home/flowbin/discards.log&#039;;&lt;br /&gt;
&lt;br /&gt;
use Data::Dumper;&lt;br /&gt;
&lt;br /&gt;
BEGIN {&lt;br /&gt;
    push @INC, &amp;quot;/usr/home/flowbin&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
use db;&lt;br /&gt;
&lt;br /&gt;
#my $queuedir = &amp;quot;/usr/home/queue&amp;quot;;&lt;br /&gt;
my $queuedir = &amp;quot;/usr/home/working&amp;quot;;&lt;br /&gt;
my $archivedir = &amp;quot;/usr/home/archive&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$queuedir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$queuedir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $queuedir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $queuedir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my $db = db-&amp;gt;new();&lt;br /&gt;
$db-&amp;gt;connect(&#039;traffic&#039;, &#039;&#039;, &#039;root&#039;, &#039;5over3&#039;) || die $db-&amp;gt;{&#039;error&#039;};&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $queuedir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
    unless($file =~ /^\./) {&lt;br /&gt;
        $file =~ /([0-9]{4}-[0-9]{2}-[0-9]{2})\.([0-9]{2})([0-9]{2})([0-9]{2})/;&lt;br /&gt;
        my $date = &amp;quot;$1 $2:$3:$4&amp;quot;;&lt;br /&gt;
        my $condensedDate = $1;&lt;br /&gt;
        $condensedDate =~ s/-//g;&lt;br /&gt;
        my $iptotal = {};&lt;br /&gt;
        my $protototal = {};&lt;br /&gt;
        my $porttotal = {};&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;started file $file at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        &amp;amp;debug(&amp;quot;getting raw flow data (flow-print)&amp;quot;);&lt;br /&gt;
        `cat $queuedir/$file | /usr/local/bin/flow-print -f 5 &amp;gt; /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;aggregating data at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        unless (open(DATA, &amp;quot;/usr/home/working/tmp-$file&amp;quot;)) { die &amp;quot;can&#039;t open: $!&amp;quot;; }&lt;br /&gt;
        LOOP: while (my $line = readline DATA) {&lt;br /&gt;
            my @d = split /[\s]+/, $line;&lt;br /&gt;
            if ($d[0] ne &#039;&#039; &amp;amp;&amp;amp; $d[0] ne &#039;Start&#039;) {&lt;br /&gt;
                my $addr = 0;&lt;br /&gt;
                my $port = 0;&lt;br /&gt;
&lt;br /&gt;
                #Start End Sif SrcIPaddress SrcP DIf DstIPaddress DstP P Fl Pkts Octets&lt;br /&gt;
                #0     1   2   3            4    5   6            7    8 9  10   11&lt;br /&gt;
                          #|&lt;br /&gt;
                          # outbound = 2, inbound = 1&lt;br /&gt;
&lt;br /&gt;
                my (@src_ip) = split &#039;\.&#039;, $d[3];&lt;br /&gt;
                my (@dst_ip) = split &#039;\.&#039;, $d[6];&lt;br /&gt;
&lt;br /&gt;
                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $src_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                    $src_ip[2] != 229 &amp;amp;&amp;amp; $src_ip[2] != 231) { # for castle&lt;br /&gt;
#                if ($src_ip[0] == 69 &amp;amp;&amp;amp; $src_ip[1] == 55 &amp;amp;&amp;amp; $src_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 2;&lt;br /&gt;
                   # hack for outbound bulk traffic counted 2x&lt;br /&gt;
                   if ($dst_ip[2] == 234) { $d[11] /= 2; $d[10] /= 2; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $dst_ip[2] &amp;lt;= 239 &amp;amp;&amp;amp;&lt;br /&gt;
                       $dst_ip[2] != 229 &amp;amp;&amp;amp; $dst_ip[2] != 231) { # for castle&lt;br /&gt;
#                elsif ($dst_ip[0] == 69 &amp;amp;&amp;amp; $dst_ip[1] == 55 &amp;amp;&amp;amp; $dst_ip[2] == 229) { # for i2b&lt;br /&gt;
                   $d[2] = 1;&lt;br /&gt;
                }&lt;br /&gt;
                else { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                if ($d[2] == 2) {&lt;br /&gt;
                    $addr = $d[3];&lt;br /&gt;
                    # if the dst-port is low, store that&lt;br /&gt;
                    if ($d[7] &amp;lt;= 1024) { $port = $d[7]; }&lt;br /&gt;
                    # if the src-port is low, store that&lt;br /&gt;
                    elsif ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                    else { $port = 99999; }&lt;br /&gt;
                }&lt;br /&gt;
                elsif ($d[2] == 1) {&lt;br /&gt;
                    $addr = $d[6];&lt;br /&gt;
                    # if the dst-port is high, assume its return traffic, try to store src-port if low&lt;br /&gt;
                    if ($d[7] &amp;gt; 1024) {&lt;br /&gt;
                        if ($d[4] &amp;lt;= 1024) { $port = $d[4]; }&lt;br /&gt;
                        else { $port = 99999; }&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $port = $d[7];&lt;br /&gt;
                    }&lt;br /&gt;
                } else {&lt;br /&gt;
                    next LOOP;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                my (@ip) = split &#039;\.&#039;, $addr;&lt;br /&gt;
                unless ($ip[0] == 69) { next LOOP; }&lt;br /&gt;
                unless ($ip[1] == 55) { next LOOP; }&lt;br /&gt;
                unless ($ip[2] &amp;gt;= 224 &amp;amp;&amp;amp; $ip[2] &amp;lt;= 239 &amp;amp;&amp;amp; $ip[2] != 229 &amp;amp;&amp;amp; $ip[2] != 231) { next LOOP; }&lt;br /&gt;
#                unless ($ip[2] == 229) { next LOOP; }&lt;br /&gt;
&lt;br /&gt;
                my $classC = &amp;quot;$ip[0]_$ip[1]_$ip[2]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#                          IP        dir&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
#&lt;br /&gt;
#                if ($d[10] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10]; }&lt;br /&gt;
#                if ($d[11] &amp;lt; 2147483647) { $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11]; }&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $iptotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $protototal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;} += $d[10];&lt;br /&gt;
                $porttotal-&amp;gt;{$classC}-&amp;gt;{$addr}-&amp;gt;{$d[2]}-&amp;gt;{$d[8]}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;} += $d[11];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        close(DATA);&lt;br /&gt;
        `rm /usr/home/working/tmp-$file`;&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing ip totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$iptotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyIpTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$iptotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    my $octets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                    my $packets = $iptotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
#                    $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
                    if ($octets &amp;gt; 2147483647) {&lt;br /&gt;
                        my $ddir = $dir==1 ? &#039;in&#039; : &#039;out&#039;;&lt;br /&gt;
                        `echo &amp;quot;$date $ip $ddir $octets\n&amp;quot; &amp;gt;&amp;gt; $log`;&lt;br /&gt;
#                        $octets = 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    # dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
                    my $id = &amp;quot;$ip-$condensedDate-$dir&amp;quot;;&lt;br /&gt;
                    $id =~ s/\.//g;&lt;br /&gt;
                    push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;;&lt;br /&gt;
                    my $sql = &amp;quot;insert into dailyIpTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                    print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                    $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#                    $db-&amp;gt;query(&amp;quot;insert into ipTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $octets, $packets)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables ipTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into ipTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sleep 20;&lt;br /&gt;
#        &amp;amp;debug(&amp;quot;processing protocol totals at &amp;quot;);&lt;br /&gt;
#        &amp;amp;debug(`date`);&lt;br /&gt;
#        foreach my $classC (keys(%{$protototal})) {&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables dailyProtoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            my @values;&lt;br /&gt;
#            foreach my $ip (keys(%{$protototal-&amp;gt;{$classC}})) {&lt;br /&gt;
#                foreach my $dir (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
#                    foreach my $proto (keys(%{$protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
#                        my $octets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
#                        my $packets = $protototal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
# #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
# #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
#                        # dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                        my $id = &amp;quot;$ip-$condensedDate-$dir-$proto&amp;quot;;&lt;br /&gt;
#                        $id =~ s/\.//g;&lt;br /&gt;
#                        push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;;&lt;br /&gt;
#                        my $sql = &amp;quot;insert into dailyProtoTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
#                        print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#                        $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
# #                        $db-&amp;gt;query(&amp;quot;insert into protoTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $octets, $packets)&amp;quot;);&lt;br /&gt;
#                    }&lt;br /&gt;
#                }&lt;br /&gt;
#            }&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#            my $sql = &amp;quot;insert into protoTotals_$classC values &amp;quot;;&lt;br /&gt;
#            $sql .= join &#039;,&#039;, @values;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;lock tables protoTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
#            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
#            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
#            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
#        }&lt;br /&gt;
&lt;br /&gt;
        &amp;amp;debug(&amp;quot;processing port totals at &amp;quot;);&lt;br /&gt;
        &amp;amp;debug(`date`);&lt;br /&gt;
        foreach my $classC (keys(%{$porttotal})) {&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables dailyPortTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            my @values;&lt;br /&gt;
            foreach my $ip (keys(%{$porttotal-&amp;gt;{$classC}})) {&lt;br /&gt;
                foreach my $dir (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}})) {&lt;br /&gt;
                    foreach my $proto (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}})) {&lt;br /&gt;
                        foreach my $port (keys(%{$porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}})) {&lt;br /&gt;
                            my $octets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;octetTotal&#039;};&lt;br /&gt;
                            my $packets = $porttotal-&amp;gt;{$classC}-&amp;gt;{$ip}-&amp;gt;{$dir}-&amp;gt;{$proto}-&amp;gt;{$port}-&amp;gt;{&#039;pktTotal&#039;};&lt;br /&gt;
    #                        $octets = $octets &amp;gt; 2147483647 ? 0 : $octets;&lt;br /&gt;
    #                        $packets = $packets &amp;gt; 2147483647 ? 0 : $packets;&lt;br /&gt;
&lt;br /&gt;
                            # dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-protocol-port&lt;br /&gt;
                            my $id = &amp;quot;$ip-$condensedDate-$dir-$proto-$port&amp;quot;;&lt;br /&gt;
                            $id =~ s/\.//g;&lt;br /&gt;
                            push @values, &amp;quot;(&#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets)&amp;quot;;&lt;br /&gt;
                            my $sql = &amp;quot;insert into dailyPortTotals_$classC values (&#039;$id&#039;, &#039;$date&#039;, &#039;$ip&#039;, $dir, $proto, $port, $octets, $packets) ON DUPLICATE KEY UPDATE octets=octets+$octets, packets=packets+$packets&amp;quot;;&lt;br /&gt;
                            print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                            $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
    #                        $db-&amp;gt;query(&amp;quot;insert into portTotals values (&#039;$date&#039;, &#039;$ip&#039;, $dir, $port, $octets, $packets)&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;lock tables portTotals_$classC write&amp;quot;) unless $dry;&lt;br /&gt;
            # break inserts into 100 records at a time&lt;br /&gt;
            &amp;amp;debug(&amp;quot;inserting $#values +1 values&amp;quot;);&lt;br /&gt;
            while ($#values &amp;gt; 0) {&lt;br /&gt;
                my $sql = &amp;quot;insert into portTotals_$classC values &amp;quot;;&lt;br /&gt;
                my $max_index = $#values &amp;gt; 100 ? 100 : $#values;&lt;br /&gt;
                for (my $i=0; $i&amp;lt;=$max_index; $i++) {&lt;br /&gt;
                    $sql .= shift @values;&lt;br /&gt;
                    $sql .= &#039;,&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                chop $sql;&lt;br /&gt;
                print &amp;quot;$sql\n&amp;quot; if $dry;&lt;br /&gt;
                $db-&amp;gt;query($sql) unless $dry;&lt;br /&gt;
            }&lt;br /&gt;
            $db-&amp;gt;query(&amp;quot;unlock tables&amp;quot;) unless $dry;&lt;br /&gt;
            sleep 10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
#                       12     1 8      1    1= 23&lt;br /&gt;
# dailyIpTotals.id = ip(no .&#039;s)-yyyymmdd-direction&lt;br /&gt;
#                       12        1  8     1   1       3=26&lt;br /&gt;
# dailyProtoTotals.id = ip(no .&#039;s)-yyyymmdd-direction-proto&lt;br /&gt;
#                       12       1   8    1     1     5=28&lt;br /&gt;
# dailyPortTotals.id = ip(no .&#039;s)-yyyymmdd-direction-port&lt;br /&gt;
        #print &amp;quot;finished at &amp;quot;;&lt;br /&gt;
        #print `date`;&lt;br /&gt;
        `mv $queuedir/$file $archivedir` unless $dry;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
`rm $queuedir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# var full during ft-v05.2005-03-28.084500-0800 and&lt;br /&gt;
# 2005-02-24 69.55.226&lt;br /&gt;
&lt;br /&gt;
# all port/daily totals before 2005-04-07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /usr/home/flowbin/db.pm&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#&lt;br /&gt;
# $Header: /usr/cvs/newgw/lib/db.pm,v 1.4 2003/06/05 18:20:01 glenn Exp $&lt;br /&gt;
#&lt;br /&gt;
# Copyright (c) 2003&lt;br /&gt;
#      e-Monitoring Networks, Inc.  All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
package db;&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use DBI;&lt;br /&gt;
&lt;br /&gt;
sub new {&lt;br /&gt;
    my $class = shift;&lt;br /&gt;
    my $self = {};&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;debug&#039;} = 0;&lt;br /&gt;
    bless $self, $class;&lt;br /&gt;
&lt;br /&gt;
    return $self;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub connect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $dbname = shift;&lt;br /&gt;
    my $dbhost = shift;&lt;br /&gt;
    my $dbuser = shift;&lt;br /&gt;
    my $dbpass = shift;&lt;br /&gt;
&lt;br /&gt;
    my $host = &#039;&#039;;&lt;br /&gt;
    if (defined($dbhost)) {&lt;br /&gt;
        $host = &amp;quot;;host=$dbhost&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    eval {&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;connecting to: DBI:mysql:database=$dbname;$host&amp;quot;, 1);&lt;br /&gt;
        $self-&amp;gt;{&#039;dbh&#039;} = DBI-&amp;gt;connect(&amp;quot;DBI:mysql:database=$dbname;$host&amp;quot;, $dbuser, $dbpass);&lt;br /&gt;
    };&lt;br /&gt;
    if ($self-&amp;gt;{&#039;dbh&#039;}) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;{&#039;error&#039;} = &amp;quot;Error connecting to database $@&amp;quot;;&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;Error connecting to database $@&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub query {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $query = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;debug($query, 1);&lt;br /&gt;
    my $sth;&lt;br /&gt;
    eval {&lt;br /&gt;
        $sth = $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;prepare($query);&lt;br /&gt;
    };&lt;br /&gt;
    unless ($sth) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error preparing query $@&amp;quot;;&lt;br /&gt;
        $self-&amp;gt;debug(&amp;quot;error preparing query $@&amp;quot;);&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    my $qty;&lt;br /&gt;
    eval {&lt;br /&gt;
        $qty = $sth-&amp;gt;execute;&lt;br /&gt;
    };&lt;br /&gt;
    unless ($qty) {&lt;br /&gt;
        $self-&amp;gt;{&#039;error&#039;} = &amp;quot;error executing query $@&amp;quot;;&lt;br /&gt;
        warn &amp;quot;error executing query $@ $query&amp;quot;;&lt;br /&gt;
        return undef;&lt;br /&gt;
    }&lt;br /&gt;
    $self-&amp;gt;debug(&amp;quot;returning $qty, $sth from query&amp;quot;, 6);&lt;br /&gt;
    return ($qty, $sth);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub disconnect {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
&lt;br /&gt;
    $self-&amp;gt;{&#039;dbh&#039;}-&amp;gt;disconnect;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
    my $msg = shift;&lt;br /&gt;
    my $level = shift || 0;&lt;br /&gt;
&lt;br /&gt;
    if ($level &amp;lt; $self-&amp;gt;{&#039;debug&#039;}) {&lt;br /&gt;
        print &amp;quot;$msg\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/home/archive&lt;br /&gt;
 mkdir -p /usr/home/sql/tmp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#process flows&lt;br /&gt;
2,17,32,47 * * * * /usr/home/flowbin/processflows.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== setup traffic db ====&lt;br /&gt;
* Install mysql:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/ports/databases/mysql50-server&lt;br /&gt;
make install clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cat &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
 mysql_enable=&amp;quot;YES&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Move db data dir:&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server stop&lt;br /&gt;
 mkdir /usr/home/database/&lt;br /&gt;
 mv /var/db/mysql/* /usr/home/database/&lt;br /&gt;
 chown -R mysql:mysql /usr/home/database&lt;br /&gt;
&lt;br /&gt;
Edit database location in startup script:&lt;br /&gt;
 vi /usr/local/etc/rc.d/mysql-server&lt;br /&gt;
 # : ${mysql_dbdir=&amp;quot;/var/db/mysql&amp;quot;}&lt;br /&gt;
 : ${mysql_dbdir=&amp;quot;/usr/home/database&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
 /usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install mysql perl database modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/ports/databases/p5-DBI&lt;br /&gt;
make install clean&lt;br /&gt;
cd /usr/ports/databases/p5-DBD-mysql50&lt;br /&gt;
make install clean&lt;br /&gt;
(no to SSL support)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Setting up database&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rehash&lt;br /&gt;
/usr/local/etc/rc.d/mysql-server start&lt;br /&gt;
mysql -u root&lt;br /&gt;
create database traffic;&lt;br /&gt;
grant all on *.* to root@localhost identified by &#039;5over3&#039;;&lt;br /&gt;
grant all on traffic.* to jc@10.1.4.5 identified by &#039;2gMKY3Wt&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this was a new server we&#039;d setup new tables. See [[#mysql_2|mysql]] for how those tables would be setup.&lt;br /&gt;
&lt;br /&gt;
We are assuming here we are moving data from an existing db, here&#039;s how that&#039;s done (from the current traffic db):&lt;br /&gt;
 rsync -av --progress /usr/home/database/traffic/ 10.1.4.203:/usr/home/database/traffic/&lt;br /&gt;
&lt;br /&gt;
When you&#039;re ready to do the cutover, shut down mysql on both hosts and do one last sync.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process flows from bwdb2 ====&lt;br /&gt;
On traffic database server (bwdb):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;crontab -e&lt;br /&gt;
#import sql from bwdb2&lt;br /&gt;
10,25,40,55 * * * * /usr/home/flowbin/processsql.pl&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add access to mysql: &lt;br /&gt;
&amp;lt;pre&amp;gt;mysql -u root -p &lt;br /&gt;
grant all on traffic.* to bwdb2@localhost identified by &#039;s1lver4d&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
&lt;br /&gt;
#use strict;&lt;br /&gt;
#$debug=1;&lt;br /&gt;
#$dry=1;&lt;br /&gt;
&lt;br /&gt;
my $sqldir = &amp;quot;/usr/home/bwdb2/pending&amp;quot;;&lt;br /&gt;
my @err;&lt;br /&gt;
unless ($dry) {&lt;br /&gt;
    if (-e &amp;quot;$sqldir/.lock&amp;quot;) {&lt;br /&gt;
        open(FILE, &amp;quot;$sqldir/.lock&amp;quot;);&lt;br /&gt;
        my $pid = &amp;lt;FILE&amp;gt;;&lt;br /&gt;
        chomp($pid);&lt;br /&gt;
        close(FILE);&lt;br /&gt;
        if (kill(0, $pid)) {&lt;br /&gt;
            #another process is using the queue, bail out&lt;br /&gt;
            exit(0);&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            #dead lock file, remove it&lt;br /&gt;
            `rm $sqldir/.lock`;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    open(FILE, &amp;quot;&amp;gt; $sqldir/.lock&amp;quot;);&lt;br /&gt;
    print FILE &amp;quot;$$\n&amp;quot;;&lt;br /&gt;
    close(FILE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
opendir(DIR, $sqldir);&lt;br /&gt;
my @files = readdir(DIR);&lt;br /&gt;
closedir(DIR);&lt;br /&gt;
&lt;br /&gt;
foreach my $file (sort @files) {&lt;br /&gt;
   next unless $file =~ /done$/;&lt;br /&gt;
   my $r = `bzcat $sqldir/$file | mysql -u bwdb2 -ps1lver4d traffic`;&lt;br /&gt;
   unless ($?==0) {&lt;br /&gt;
      push @err, &amp;quot;bzcat $sqldir/$file | mysql -u bwdb2 -pxxxxx traffic ($r)&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else {&lt;br /&gt;
      `rm $sqldir/$file`;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
`rm $sqldir/.lock` unless $dry;&lt;br /&gt;
&lt;br /&gt;
if (@err) {&lt;br /&gt;
   email_support(&#039;bwdb2: sendsql.pl error&#039;,join &amp;quot;\n&amp;quot;, @err);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub email_support {&lt;br /&gt;
    my $subj=shift;&lt;br /&gt;
    my $body=shift;&lt;br /&gt;
    use Mail::Sendmail;&lt;br /&gt;
&lt;br /&gt;
    # prepare message&lt;br /&gt;
    my %mail = (&lt;br /&gt;
        To      =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        From    =&amp;gt; &#039;support@johncompanies.com&#039;,&lt;br /&gt;
        Subject =&amp;gt; $subj,&lt;br /&gt;
        Message =&amp;gt; $body,&lt;br /&gt;
        smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;,&lt;br /&gt;
    );&lt;br /&gt;
    sendmail(%mail) || warn &amp;quot;Error: $Mail::Sendmail::error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub debug {&lt;br /&gt;
    my $message = shift;&lt;br /&gt;
    if ($debug) {&lt;br /&gt;
        print &amp;quot;$message\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/home/flowbin/processsql.pl&lt;br /&gt;
&lt;br /&gt;
Make sure bwdb is reachable from the outside only to bwdb2:&lt;br /&gt;
&lt;br /&gt;
On nat, add to &amp;lt;tt&amp;gt;/etc/ipnat.rules&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;# bwdb&lt;br /&gt;
bimap fxp0 10.1.4.203/32 -&amp;gt; 69.55.233.199/32&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload:&lt;br /&gt;
 ipnat -C -F -f /etc/ipnat.rules&lt;br /&gt;
&lt;br /&gt;
Setup firewall rule on firewall:&lt;br /&gt;
 ipfw add 00094 allow ip from 66.181.18.5 to 69.55.233.199 22&lt;br /&gt;
 ipfw add 00094 deny ip from any to 69.55.233.199&lt;br /&gt;
&lt;br /&gt;
Setup firewall on bwdb to restrict access now that it&#039;s nat&#039;d:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
ipfw add 1 allow tcp from any to any established&lt;br /&gt;
ipfw add 2 allow ip from 10.1.4.0/24,66.181.18.5,69.55.233.195 to me 22&lt;br /&gt;
ipfw add 3 allow ip from 10.1.4.5 to me 3306&lt;br /&gt;
ipfw add 4 allow ip from 69.55.225.225 53 to me &lt;br /&gt;
ipfw add 5 allow ip from 69.55.230.2 25 to me &lt;br /&gt;
ipfw add 100 deny ip from any to me&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/etc/rc.d/boot.sh&lt;br /&gt;
&lt;br /&gt;
From bwdb2, add ssh key:&lt;br /&gt;
 cat /root/.ssh/id_dsa.pub | ssh 69.55.233.199 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
&lt;br /&gt;
Confirm no password access:&lt;br /&gt;
 ssh 69.55.233.199 hostname&lt;br /&gt;
&lt;br /&gt;
= bwdb2 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine tracks and stores network traffic (netflow) at i2b. It is our means to monitor customer bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab6&lt;br /&gt;
* OS: FreeBSD 6.4 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.2.4 There are 2 onboard nic&#039;s, one of which is the &amp;quot;listener&amp;quot;&lt;br /&gt;
* Hardware: Custom 2U. Single power supply. &lt;br /&gt;
* Drives: two 150 GB (2 x 150GB) RAID1 arrays running on a 3ware 7006 RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* netflow&lt;br /&gt;
* bigbrother &lt;br /&gt;
&lt;br /&gt;
== netflow ==&lt;br /&gt;
&lt;br /&gt;
The main function of this server is to run netflow on an eth device in promiscuous mode so as to hear everything happening on the port (wherein all network traffic is mirrored to that port via the cisco swith). Every 15min, it creates a flow file under &amp;lt;tt&amp;gt;/usr/home/flows/&amp;lt;/tt&amp;gt; (organized by date). The flow file contains all traffic data for a 15min increment of time.&lt;br /&gt;
&lt;br /&gt;
A cronjob moves that flow file (or files if there are multiple due to some delay) &lt;br /&gt;
 1,16,31,46 * * * * /usr/home/flowbin/queue.pl&lt;br /&gt;
&lt;br /&gt;
into a processing queue:&lt;br /&gt;
&amp;lt;tt&amp;gt;/usr/home/working&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then a separate file processes whatever flow files it finds there, and builds sql files ready for insertion into the traffic database:&lt;br /&gt;
 2,17,32,47 * * * * /usr/home/flowbin/processflows-sql.pl&lt;br /&gt;
&lt;br /&gt;
Then yet another process copies the sql files to the traffic database server for processing and insertion into the mysql database:&lt;br /&gt;
 8,23,38,53 * * * * /usr/home/flowbin/sendsql.pl&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Adaptec_Controllers|Check RAID array]]&lt;br /&gt;
&lt;br /&gt;
* if space becomes tight, move sql files and flow files to backup server, both located in &amp;lt;tt&amp;gt;/usr/home/flowbin/archive&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= firewall (newgateway) =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is the primary (only) firewall for the entire network at castle. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: FreeBSD 4.11 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.223, Pub IPs: 69.55.233.164 (external), 69.55.233.156 (internal). It has 3 network connections (2 onboard, 1 PCI) connecting to the external, internal and private networks. If you&#039;re looking at the back of the server, the internal-network-facing nic is on the right (em1), and the external-facing-network (3750) is on the left (em0).&lt;br /&gt;
* Hardware: 6 SCSI SCA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 36 GB (2 x 36GB) RAID1 array running on an Adaptec 2120S PCI RAID card.&lt;br /&gt;
&lt;br /&gt;
== Services Provided ==&lt;br /&gt;
* firewall (ipfw)&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Firewall Rule Configuration ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Firewall_Rule_Configuration|Firewall Rule Configuration]] for more discussion on how to actually manipulate firewall rules.&lt;br /&gt;
&lt;br /&gt;
== Disaster Recovery ==&lt;br /&gt;
&lt;br /&gt;
If there is ever an outage with the firewall, the old firewall &amp;quot;gate&amp;quot; is located just below and is running with the proper network configuration, but with no firewall rules in place (to facilitate good throughput). Have castle move the cable on the left on the current firewall to the left port in the old firewall and the right cable to the right port.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s what you need to put in /etc/rc.conf to get a firewall going (as far as routes and IPs)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;hostname=&amp;quot;newgateway.johncompanies.com&amp;quot;&lt;br /&gt;
firewall_script=&amp;quot;/etc/firewall.sh&amp;quot;&lt;br /&gt;
firewall_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
sendmail_enable=&amp;quot;NONE&amp;quot;&lt;br /&gt;
sshd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
inetd_enable=&amp;quot;NO&amp;quot;&lt;br /&gt;
xntpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
snmpd_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#snmpd_flags=&amp;quot;-as -p /var/run/snmpd.pid&amp;quot;&lt;br /&gt;
#ipnat_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
#ipnat_rules=&amp;quot;/etc/ipnat.rules&amp;quot;&lt;br /&gt;
gateway_enable=&amp;quot;YES&amp;quot;&lt;br /&gt;
&lt;br /&gt;
defaultrouter=&amp;quot;69.55.233.161&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ifconfig_xl0=&amp;quot;inet 10.1.4.223 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
ifconfig_em0=&amp;quot;inet 69.55.233.164 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Original JohnCompanies 69.55.224.0/20&lt;br /&gt;
#&lt;br /&gt;
ifconfig_em1=&amp;quot;inet 69.55.233.156 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static_routes=&amp;quot;route1 route2 route3 route4 route5 route6 route7 route8 route9 route10 route11 route1&lt;br /&gt;
2 route13 route14 route15 route16 route17 route18&amp;quot;&lt;br /&gt;
&lt;br /&gt;
route_route1=&amp;quot;-net 69.55.224.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route2=&amp;quot;-net 69.55.225.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route3=&amp;quot;-net 69.55.226.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route4=&amp;quot;-net 69.55.227.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route5=&amp;quot;-net 69.55.228.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route6=&amp;quot;-net 69.55.229.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route7=&amp;quot;-net 69.55.230.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route8=&amp;quot;-net 69.55.231.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route9=&amp;quot;-net 69.55.232.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route10=&amp;quot;-net 69.55.233.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route11=&amp;quot;-net 69.55.234.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route12=&amp;quot;-net 69.55.235.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route13=&amp;quot;-net 69.55.236.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route14=&amp;quot;-net 69.55.237.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route15=&amp;quot;-net 69.55.238.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route16=&amp;quot;-net 69.55.239.0 69.55.233.153&amp;quot;&lt;br /&gt;
route_route17=&amp;quot;-net 10.1.5.0 10.1.4.2&amp;quot;&lt;br /&gt;
route_route18=&amp;quot;-net 10.1.6.0 10.1.4.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#In case of 3750 failure:&lt;br /&gt;
#defaultrouter=&amp;quot;69.43.128.81&amp;quot;&lt;br /&gt;
#ifconfig_em0=&amp;quot;inet 69.43.129.84 netmask 255.255.255.248&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bind .1&#039;s here:&lt;br /&gt;
#ifconfig_em1=&amp;quot;inet 69.55.224.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias0=&amp;quot;inet 69.55.225.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias1=&amp;quot;inet 69.55.226.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias2=&amp;quot;inet 69.55.227.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias3=&amp;quot;inet 69.55.228.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias4=&amp;quot;inet 69.55.229.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias5=&amp;quot;inet 69.55.230.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias6=&amp;quot;inet 69.55.231.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias7=&amp;quot;inet 69.55.232.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias8=&amp;quot;inet 69.55.233.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias9=&amp;quot;inet 69.55.234.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias10=&amp;quot;inet 69.55.235.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias11=&amp;quot;inet 69.55.236.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias12=&amp;quot;inet 69.55.237.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias13=&amp;quot;inet 69.55.238.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
#ifconfig_em1_alias14=&amp;quot;inet 69.55.239.1 netmask 255.255.255.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#bulk:&lt;br /&gt;
# reassign 69.55.231.1 to the int iface on the firewall&lt;br /&gt;
# set the DG on the firewall to 69.43.138.9&lt;br /&gt;
# set the ext firewall IP to 69.43.138.12, NM: 255.255.255.248&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 1 0 * * * /usr/local/etc/rsync.backup&lt;br /&gt;
Backup to backup1&lt;br /&gt;
&lt;br /&gt;
 0 0 1 * * /sbin/ipfw zero&lt;br /&gt;
 0 0 1 * * /sbin/ipfw del 3  4 5 17331&lt;br /&gt;
Reset counters and remove pipe rules on the 1st of the month. Pay attention when setting up a rule as 3 4 5 (that&#039;s not a temporary traffic cap). &lt;br /&gt;
&lt;br /&gt;
Inside &amp;lt;tt&amp;gt;/etc/daily.local&amp;lt;/tt&amp;gt; you will see a call to &amp;lt;tt&amp;gt;/etc/makepiperules.pl&amp;lt;/tt&amp;gt;&lt;br /&gt;
This script will create &amp;lt;tt&amp;gt;/etc/firewall.sh&amp;lt;/tt&amp;gt; which contains all the firewall and pipe rules in place at the time the script was run.&lt;br /&gt;
&lt;br /&gt;
== DOS attacks ==&lt;br /&gt;
&lt;br /&gt;
See [[FreeBSD_Reference#Handling_a_DoS_attack|Handling a DoS attack]] regarding how to handle a DOS attack.&lt;br /&gt;
&lt;br /&gt;
Theres a background process (running from user shell) that monitors the firewall for incoming UDP DoS attacks. When it notices packets above a certain level it will&lt;br /&gt;
# enter a rule that allows all UDP to go through&lt;br /&gt;
# send an emergency email to support and indicating an attack is in progress&lt;br /&gt;
# send an email to castle (nocstaff@castleaccess.com and jcsupport@castleaccess.com) telling them to investigate and put up a null if warranted&lt;br /&gt;
# wait for a couple minutes to see if the attack subsides- if so it will remove the pass-all UDP rule, if not it will repeat the process from #1&lt;br /&gt;
This file lives under /usr/home/user/doswatch.pl&lt;br /&gt;
To run:&lt;br /&gt;
 cd /usr/home/user&lt;br /&gt;
 ./doswatch.pl &amp;amp;&lt;br /&gt;
&lt;br /&gt;
To kill;&lt;br /&gt;
 fg&lt;br /&gt;
 ^C&lt;br /&gt;
&lt;br /&gt;
It writes its findings to /usr/home/user/doswatch.log&lt;br /&gt;
&lt;br /&gt;
= backup1 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine acts as the primary backup location for all VPS-based customers. No customer directly accesses this server to perform their backups. We also store cancelled customers on this server. &lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: Ubuntu 8.04.1 server x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.8, Pub IP: 69.55.230.11 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 6 SATA drive bays (2 columns of 3, drive 0 top left, drive 1 just below) all hot-swap. Single power supply. &lt;br /&gt;
* Drives: 4.5 TB (6 x 1TB) RAID5 array running on a 3ware 9650SE-8LPML (8-port) card&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync&lt;br /&gt;
* mysql&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage and Notes ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* virtually all jc infrastructure, and all VPS machines are setup to mount to backup1 via nfs (mountpoint: &amp;lt;tt&amp;gt;/backup1&amp;lt;/tt&amp;gt;), and they all have their ssh keys setup to allow passwordless rsync&#039;s&lt;br /&gt;
* each virt or jail backs up each evening to backup1. Each server has it&#039;s own directory (named for the server). Under those directories are 7 daily snapshots (0-6)&lt;br /&gt;
* at the time of writing, the mysql server running here is replicating from (slave to) the mysql instance on bwdb. Requests for bandwidth data usage for customers (coming from management, account manager, and accounting scripts running on mail) all direct towards the database &amp;quot;traffic&amp;quot; running on this server.&lt;br /&gt;
* cancelled customer systems are compressed and stored under &amp;lt;tt&amp;gt;/data/deprecated&amp;lt;/tt&amp;gt;&lt;br /&gt;
* archived bwdb2 flow files are stored under &amp;lt;tt&amp;gt;/data/bwdb2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* critical files from backup2 are stored under &amp;lt;tt&amp;gt;/data/backup2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 5 * * * /usr/local/sbin/backupwatch.pl 2&amp;gt;&amp;amp;1 &amp;gt; /dev/null&lt;br /&gt;
35 5 * * * /usr/local/sbin/usage_check; /usr/local/sbin/snapshot_archive; /usr/local/sbin/snapshot_rotate  /data/backuplog.log&amp;lt;/pre&amp;gt;&lt;br /&gt;
this runs daily the scripts to report on how much disk space each customer system occupies and how long their backups took. Then it rotates backups for each system, removing the oldest backup.&lt;br /&gt;
&amp;lt;pre&amp;gt;10,25,40,55 * * * * /usr/local/sbin/processsql.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this processes prepared sql command files sent from/by bwdb2 (@ i2b) and imports them into the traffic database.&lt;br /&gt;
&amp;lt;pre&amp;gt;0 0 * * * /usr/local/sbin/3wraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
checks the health of the RAID array&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Free_up_space_on_backup1|Remove old backups]]&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on auto-verify]]&lt;br /&gt;
&lt;br /&gt;
= backup2 =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
This machine is used for archiving data and is a backup server for colo customers. It was the former primary backup location for all VPS-based customers before backup1 was installed. Only dedicated customers directly accesses this server to perform their backups. NOTE: power button is broken, so the reset button (paper clip) was rewired to be the power button.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-7&lt;br /&gt;
* OS: FreeBSD 6.1 x86&lt;br /&gt;
* Networking: Priv IP: 10.1.4.3, Pub IP: 69.55.230.10 (firewalled from all but JC infrastructure @ i2b)&lt;br /&gt;
* Hardware: 16 IDE drive bays (4 columns of 4, drive 0-0 top left, drive 0-1 just to the right TODO) all hot-swap. Triple power supply. &lt;br /&gt;
* Drives: &lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***200 GB JBOD (1 x 200G) labeled 0-0&lt;br /&gt;
***500 GB RAID5 (3 x 250G) 0-1 thru 0-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 0-4 thru 0-7&lt;br /&gt;
**3ware 7500-8:&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-0 thru 1-3&lt;br /&gt;
***700 GB RAID5 (4 x 250G) 1-4 thru 1-7&lt;br /&gt;
&lt;br /&gt;
All drives MUST be western digital IDE drives. Other brands will not fit.&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under 4 mount points, corresponding to the 4 large RAID5 arrays: &amp;lt;tt&amp;gt;/mnt/data1 /mnt/data2 /mnt/data3 /mnt/data4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/mnt/data2/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this used to be our primary backup server so you will see old backups from virt and jails around- missing customer data though, just the machine&#039;s data&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* isys backs up here&lt;br /&gt;
* customers are nfs-moutned under /mnt/data3/customers as file-backed md devices&lt;br /&gt;
* in &amp;lt;tt&amp;gt;/mnt/data4&amp;lt;/tt&amp;gt; there are lots of useful things used for building our vps servers, customer servers, and management scripts:&lt;br /&gt;
** &amp;lt;tt&amp;gt;/bin&amp;lt;/tt&amp;gt;: the master repository of scripts and custom binaries we use on jails and virts. Each night every virt and jail rsync&#039;s what&#039;s in here to update the local files. So any global updates to scripts would need to be made here (or will be overwritten with what&#039;s in here)&lt;br /&gt;
** &amp;lt;tt&amp;gt;/build&amp;lt;/tt&amp;gt;: files we use for setting up big brother, 3ware cli and scripts for colo&#039;s, vzcp customized setup files and so on&lt;br /&gt;
** &amp;lt;tt&amp;gt;/vzrpms&amp;lt;/tt&amp;gt;: contains the OS templates for many-to-most of the OS&#039;s we offer on vz systems&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
* backs itself up nightly to nfs-mounted backup1 (mountpoint: &amp;lt;tt&amp;gt;/backup2&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#3ware|Check on health]]&lt;br /&gt;
&lt;br /&gt;
= backup3 =&lt;br /&gt;
== Summary ==&lt;br /&gt;
This machine is used for archiving data, is a backup server for colo customers, runs a samba server to make available iso&#039;s to the IPKVMs, and allows us to connect to the digi serial multiplexer at i2b. Only dedicated customers directly accesses this server to perform their backups. &lt;br /&gt;
&lt;br /&gt;
* Location: i2b, cab 6&lt;br /&gt;
* OS: Ubuntu 10.04.1 server amd64&lt;br /&gt;
* Networking: Priv IP: 10.1.2.3, Pub IPs: 69.55.229.4 AND 69.55.231.2&lt;br /&gt;
* Hardware: 16 drive SATA bays (4 columns of 4, drive 0 top left, drive 1 just below) all hot-swap. Dual power supply. &lt;br /&gt;
* Drives: 5 TB (6 x 1TB) RAID5 array running on an Areca Technology Corp. ARC-1160 16-Port&lt;br /&gt;
&lt;br /&gt;
== Services provided ==&lt;br /&gt;
* backup via rsync and nfs&lt;br /&gt;
* samba&lt;br /&gt;
* nfs&lt;br /&gt;
* digi realport&lt;br /&gt;
* snmp&lt;br /&gt;
* bigbrother&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
* all data is stored under /data&lt;br /&gt;
* iso images provided for customers wanting to mount an ISO as a CDROM via the IPKVM are provided via samba on this server. Images live under &amp;lt;tt&amp;gt;/data/iso&amp;lt;/tt&amp;gt;&lt;br /&gt;
* this server serves as an archive for exported db data from bwdb and old flow files.&lt;br /&gt;
* inftrastructure machines at i2b back up here&lt;br /&gt;
* customers are nfs-moutned under /data/customers as file-backed loopback devices&lt;br /&gt;
&lt;br /&gt;
== management scripts ==&lt;br /&gt;
* mkbackups&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
 0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
RAID checks&lt;br /&gt;
&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
Rotate daily snapshots for infrastructure machine backups&lt;br /&gt;
&lt;br /&gt;
== Regular maintenance ==&lt;br /&gt;
*[[Routine_Maintenance#Areca|Check on RAID health]]&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
=== BIOS Config ===&lt;br /&gt;
disable quiet boot&lt;br /&gt;
&lt;br /&gt;
set to last state after power loss&lt;br /&gt;
&lt;br /&gt;
set date/time to GMT&lt;br /&gt;
&lt;br /&gt;
enable serial console output (baud rate 115200)&lt;br /&gt;
&lt;br /&gt;
=== Install OS ===&lt;br /&gt;
&amp;lt;pre&amp;gt;Ubuntu 10.04.1 amd64 (couldn&#039;t get 12.04 to load cause the H/W was incompat)&lt;br /&gt;
10G / ext3&lt;br /&gt;
2G swap&lt;br /&gt;
~ /data ext4&lt;br /&gt;
&lt;br /&gt;
Install packages:&lt;br /&gt;
openssh&lt;br /&gt;
samba&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS and private IP ===&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;nameserver 69.55.225.225&amp;quot; &amp;gt;&amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Add a 2nd IP to eth0 and setup priv net&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
        address 69.55.229.4&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.229.0&lt;br /&gt;
        broadcast 69.55.229.255&lt;br /&gt;
        gateway 69.55.229.1&lt;br /&gt;
        # dns-* options are implemented by the resolvconf package, if installed&lt;br /&gt;
        dns-nameservers 69.55.229.3 66.181.0.2&lt;br /&gt;
        dns-search johncompanies.com&lt;br /&gt;
&lt;br /&gt;
auto eth0:1&lt;br /&gt;
iface eth0:1 inet static&lt;br /&gt;
        address 69.55.231.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 69.55.231.0&lt;br /&gt;
        broadcast 69.55.231.255&lt;br /&gt;
&lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 10.1.2.3&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 10.1.2.0&lt;br /&gt;
        broadcast 10.1.2.255&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install packages ===&lt;br /&gt;
&amp;lt;pre&amp;gt;apt-get update&lt;br /&gt;
apt-get upgrade&lt;br /&gt;
apt-get install gcc&lt;br /&gt;
apt-get install libssl-dev&lt;br /&gt;
apt-get install libncurses5-dev&lt;br /&gt;
apt-get install cu&lt;br /&gt;
apt-get install unzip&lt;br /&gt;
apt-get install snmp snmpd ntp nfs-kernel-server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tweak grub, enable serial ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/default/grub&lt;br /&gt;
#GRUB_HIDDEN_TIMEOUT=0&lt;br /&gt;
GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;max_loop=64&amp;quot;&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;console=tty0 console=ttyS0&amp;quot;&lt;br /&gt;
update-grub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;start on stopped rc RUNLEVEL=[2345]&lt;br /&gt;
stop on runlevel [!2345]&lt;br /&gt;
respawn&lt;br /&gt;
exec /sbin/getty -L ttyS0 38400 vt102&amp;quot; &amp;gt; /etc/init/ttyS0.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== install realport (digi) driver ===&lt;br /&gt;
&lt;br /&gt;
give the digi an ip with DgIpServ.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /usr/src/&lt;br /&gt;
wget ftp://ftp1.digi.com/support/beta/linux/dgrp/dgrp-1.9.tgz&lt;br /&gt;
tar xzf dgrp-1.9.tgz &lt;br /&gt;
cd dgrp-1.9/&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
make postinstall&lt;br /&gt;
update-rc.d dgrp_daemon defaults&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
configure ports:&lt;br /&gt;
 dgrp_cfg_node init el 10.1.2.10 16&lt;br /&gt;
&lt;br /&gt;
try connecting with:&lt;br /&gt;
 cu -l /dev/ttyel00 -s 38400&lt;br /&gt;
&lt;br /&gt;
=== shell, ntp, ssh key, hosts ===&lt;br /&gt;
&lt;br /&gt;
Shell autocompletion search:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;\&amp;quot;\e[5~\&amp;quot;: history-search-backward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&lt;br /&gt;
echo &amp;quot;\&amp;quot;\e[6~\&amp;quot;: history-search-forward&amp;quot; &amp;gt;&amp;gt; ~/.inputrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup ntp:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/ntp.conf&lt;br /&gt;
server 10.1.2.1&lt;br /&gt;
server ntp.ubuntu.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generate ssh keys:&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /root/&lt;br /&gt;
ssh-keygen -t dsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Defaults, no password&lt;br /&gt;
&lt;br /&gt;
Setup hosts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;69.55.230.10 backup2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;69.55.230.11 backup1&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.4 bwdb2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
echo &amp;quot;10.1.2.3 backup3&amp;quot; &amp;gt;&amp;gt; /etc/hosts&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy keys to servers where we need passwordless login:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat .ssh/id_dsa.pub | ssh backup2 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039; &lt;br /&gt;
cat .ssh/id_dsa.pub | ssh backup1 &#039;cat - &amp;gt;&amp;gt; /root/.ssh/authorized_keys&#039;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Setup shell:&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /root/.bashrc&lt;br /&gt;
(add to bottom)&lt;br /&gt;
alias h=&#039;history&#039;&lt;br /&gt;
alias vi=&#039;vim&#039;&lt;br /&gt;
alias j=&#039;jobs&#039;&lt;br /&gt;
export PS1=&amp;quot;[\u@\h \w]# &amp;quot;&lt;br /&gt;
alias dr=&#039;screen -dr&#039;&lt;br /&gt;
export EDITOR=vim&lt;br /&gt;
export GREP_OPTIONS=&#039;--color=auto&#039;&lt;br /&gt;
export HISTFILESIZE=1000&lt;br /&gt;
&lt;br /&gt;
alias tip-switch-p20=&#039;cu -l ttyel00 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p21=&#039;cu -l ttyel15 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p22=&#039;cu -l ttyel14 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p23=&#039;cu -l ttyel05 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p24=&#039;cu -l ttyel06 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p25=&#039;cu -l ttyel09 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p26=&#039;cu -l ttyel07 -s 9600&#039;&lt;br /&gt;
alias tip-switch-p27=&#039;cu -l ttyel08 -s 9600&#039;&lt;br /&gt;
alias tip-firewall2=&#039;cu -l ttyel01 -s 115200&#039;&lt;br /&gt;
alias tip-nat2=&#039;cu -l /dev/ttyel02 -s 115200&#039;&lt;br /&gt;
alias tip-backup3=&#039;cu -l ttyel04 -s 38400&#039;&lt;br /&gt;
alias tip-bwdb2=&#039;cu -l ttyel03 -s 115200&#039;&lt;br /&gt;
alias tip-backup4=&#039;cu -l ttyel13 -s 115200&#039;&lt;br /&gt;
alias tip-jail3=&#039;cu -l ttyel11 -s 115200&#039;&lt;br /&gt;
&lt;br /&gt;
Load new shell:&lt;br /&gt;
 source /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
Setup snmpd (this is only valid for a server at castle):&lt;br /&gt;
echo &#039;rocommunity  jcread 10.1.4.5&lt;br /&gt;
rocommunity  jcread 10.1.4.3&lt;br /&gt;
agentaddress 10.1.4.8:161&#039; &amp;gt; /etc/snmp/snmpd.conf&lt;br /&gt;
&lt;br /&gt;
to see which iface it is, on backup2:&lt;br /&gt;
&lt;br /&gt;
snmpwalk -v 1 -c jcread 10.1.4.8 interface&lt;br /&gt;
&lt;br /&gt;
=== nfs ===&lt;br /&gt;
&lt;br /&gt;
Allow mounts from private net:&lt;br /&gt;
 echo &#039;/data 10.1.2.0/24(rw,no_root_squash,async,no_subtree_check)&#039; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
&lt;br /&gt;
Restart nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
=== bb ===&lt;br /&gt;
&lt;br /&gt;
Add user, group:&lt;br /&gt;
 echo &amp;quot;bb:x:1984:1984:Big Brother:/home/bb:/bin/bash&amp;quot; &amp;gt;&amp;gt; /etc/passwd&lt;br /&gt;
 echo &amp;quot;bb:x:1984:&amp;quot; &amp;gt;&amp;gt; /etc/group&lt;br /&gt;
 pwconv&lt;br /&gt;
&lt;br /&gt;
Create home:&lt;br /&gt;
 mkdir /home/bb&lt;br /&gt;
 chown bb.bb /home/bb&lt;br /&gt;
 cd ~bb&lt;br /&gt;
&lt;br /&gt;
Copy over and install files:&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/mnt/data4/build/bb/bb-linux.tar .&lt;br /&gt;
tar xf bb-linux.tar&lt;br /&gt;
cd /home/bb/bbc1.9e-btf/etc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure main bb server:&lt;br /&gt;
 echo &amp;quot;69.55.230.2 mail.johncompanies.com # BBPAGER BBNET BBDISPLAY smtp ssh&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
 echo &amp;quot;10.1.2.3 backup3.johncompanies.com # ssh&amp;quot; &amp;gt;&amp;gt; /home/bb/bbc1.9e-btf/etc/bb-hosts&lt;br /&gt;
&lt;br /&gt;
Configure low disk alerts:&lt;br /&gt;
&amp;lt;pre&amp;gt;echo &amp;quot;/:90:95&lt;br /&gt;
/var:90:95&lt;br /&gt;
/data:85:99&amp;quot; &amp;gt; /home/bb/bbc1.9e-btf/etc/bb-dftab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 vi /home/bb/bbc1.9e-btf/bin/bb-disk.sh&lt;br /&gt;
(remove all | SORT xxxx since SORT is broken)&lt;br /&gt;
&lt;br /&gt;
 chmod +r /var/log/messages&lt;br /&gt;
&lt;br /&gt;
 ./bbchkcfg.sh &lt;br /&gt;
(y to questions)&lt;br /&gt;
 ./bbchkhosts.sh&lt;br /&gt;
(ignore ssh errors)&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ../..&lt;br /&gt;
chown -R bb .&lt;br /&gt;
su bb&lt;br /&gt;
cd&lt;br /&gt;
cd bbc1.9e-btf/src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;make; make install&lt;br /&gt;
cd ..&lt;br /&gt;
./runbb.sh start&lt;br /&gt;
more BBOUT&amp;lt;/pre&amp;gt; &lt;br /&gt;
(look for errors)&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi /etc/rc.local&lt;br /&gt;
su - bb -c &amp;quot;cd /home/bb/bbc1.9e-btf; ./runbb.sh start&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(before the exit 0)&lt;br /&gt;
&lt;br /&gt;
 echo &#039;chmod o+r /var/log/messages&#039; &amp;gt;&amp;gt; /etc/cron.weekly/sysklogd&lt;br /&gt;
&lt;br /&gt;
Add f/w rule:&lt;br /&gt;
 ipfw add 00096 allow ip from { 69.55.229.4 or 69.55.229.3 } to 69.55.230.2 1984&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vi ~bb/bbc1.9e-btf/etc/bbdef-client.sh&lt;br /&gt;
DFWARN=199&lt;br /&gt;
DFPANIC=199&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== raid check ===&lt;br /&gt;
&lt;br /&gt;
==== 3ware ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp backup1:/usr/local/sbin/tw_cli /usr/local/sbin/tw_cli&lt;br /&gt;
scp backup1:/usr/local/sbin/checkraid.sh /usr/local/sbin/checkraid.sh&lt;br /&gt;
scp backup1:/usr/local/sbin/3wraidchk /usr/local/sbin/3wraidchk&lt;br /&gt;
vi /usr/local/sbin/checkraid.sh&lt;br /&gt;
:%s/c0/c2/g&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/3wraidchk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== areca ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://www.areca.us/support/s_linux/cli/linuxcli_V1.10.0_120815.zip&lt;br /&gt;
unzip linuxcli_V1.10.0_120815.zip&lt;br /&gt;
cp linuxcli_V1.10.0_120815/x86_64/cli64 /usr/local/sbin/&lt;br /&gt;
chmod 0700 /usr/local/sbin/cli64&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;scp backup2:/data4/bin/arecaraidchk /usr/local/sbin&lt;br /&gt;
scp backup1:/usr/local/sbin/Sendmail.pm /usr/local/sbin&lt;br /&gt;
&lt;br /&gt;
crontab -e&lt;br /&gt;
0 0 * * * /usr/local/sbin/arecaraidchk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /root/verify.sh&lt;br /&gt;
cli64 vsf info&lt;br /&gt;
cli64 rsf info&lt;br /&gt;
cli64 disk info&lt;br /&gt;
cli64 event info&lt;br /&gt;
echo press enter when ready to run verify ; read x&lt;br /&gt;
&lt;br /&gt;
cli64 vsf check vol=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== misc binaries ===&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/snapshot_archive /usr/local/sbin/snapshot_archive&lt;br /&gt;
 vi /usr/local/sbin/snapshot_archive&lt;br /&gt;
(remove entries)&lt;br /&gt;
&lt;br /&gt;
 crontab -e&lt;br /&gt;
 35 4 * * * /usr/local/sbin/snapshot_archive&lt;br /&gt;
&lt;br /&gt;
 scp backup1:/usr/local/sbin/pagedave /usr/local/sbin/pagedave&lt;br /&gt;
 scp backup1:/usr/local/sbin/taskdone /usr/local/sbin/taskdone&lt;br /&gt;
&lt;br /&gt;
Since installing /bin/mail requires all sorts of packages (lame) we write a simple one here...which can only email johncompanies.com addr&#039;s unless you add relaying for this host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /bin/mail&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
use lib &#039;/usr/local/sbin&#039;;&lt;br /&gt;
use Sendmail qw(sendmail);&lt;br /&gt;
&lt;br /&gt;
my $sub = $ARGV[1];&lt;br /&gt;
my $to = $ARGV[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
my %mail = (&lt;br /&gt;
   To      =&amp;gt; $to,&lt;br /&gt;
   From    =&amp;gt; $to,&lt;br /&gt;
   Subject =&amp;gt; $sub,&lt;br /&gt;
   Message =&amp;gt; &#039;&#039;,&lt;br /&gt;
   smtp    =&amp;gt; &#039;mail.johncompanies.com&#039;&lt;br /&gt;
);&lt;br /&gt;
sendmail(%mail) || print &amp;quot;Error: $Sendmail::error&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /bin/mail&lt;br /&gt;
&lt;br /&gt;
=== mkbackup ===&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/customers&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cat &amp;gt; /usr/local/sbin/mkbackup&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test $1; then&lt;br /&gt;
  cid=$1&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $2; then&lt;br /&gt;
  gb=$2&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test $3; then&lt;br /&gt;
  ip=$3&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;ERROR: Usage: mkbackup cid GB ip  Terminating.&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/${cid}-file; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/${cid}-file exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;touch /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  touch /data/customers/${cid}-file&lt;br /&gt;
  count=`echo $gb|awk &#039;{print $1*1000}&#039;`&lt;br /&gt;
  echo &amp;quot;dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&amp;quot;&lt;br /&gt;
  dd if=/dev/zero of=/data/customers/${cid}-file bs=1024K count=$count&lt;br /&gt;
  echo &amp;quot;/sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&amp;quot;&lt;br /&gt;
  /sbin/mkfs -t ext3 -F -j -q /data/customers/${cid}-file&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if test -e /data/customers/$cid; then&lt;br /&gt;
  echo &amp;quot;ERROR: /data/customers/$cid exists&amp;quot;&lt;br /&gt;
  exit&lt;br /&gt;
else&lt;br /&gt;
  echo &amp;quot;mkdir /data/customers/${cid}&amp;quot;&lt;br /&gt;
  mkdir /data/customers/${cid}&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot;&lt;br /&gt;
  mount -o loop /data/customers/${cid}-file /data/customers/$cid&lt;br /&gt;
  df -h /data/customers/$cid&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;fsck -y /data/customers/${cid}-file&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;mount -o loop /data/customers/${cid}-file /data/customers/$cid&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
  echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;/data/customers/$cid $ip/32(rw,no_root_squash,async,no_subtree_check)&amp;quot; &amp;gt;&amp;gt; /etc/exports&lt;br /&gt;
  /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
  tail /var/log/messages&lt;br /&gt;
fi&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod 0700 /usr/local/sbin/mkbackup&lt;br /&gt;
&lt;br /&gt;
 vi /etc/rc.local&lt;br /&gt;
add:&lt;br /&gt;
 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
=== samba ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install samba&lt;br /&gt;
&lt;br /&gt;
 vi /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
; comment out any mounts, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[data]&lt;br /&gt;
   read only = yes&lt;br /&gt;
   locking = no&lt;br /&gt;
   path = /data/iso&lt;br /&gt;
   guest ok = yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 /etc/init.d/smbd restart&lt;br /&gt;
&lt;br /&gt;
 mkdir /data/iso&lt;br /&gt;
&lt;br /&gt;
Bring over some stuff from backup2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd /data/iso&lt;br /&gt;
scp backup2:/d2/iso/3wfirmware.iso .&lt;br /&gt;
scp backup2:/d2/iso/MD5SUMS .&lt;br /&gt;
scp backup2:/d2/iso/bootimg.iso .&lt;br /&gt;
scp backup2:/d2/iso/systemrescuecd-x86-0.2.19.iso .&lt;br /&gt;
scp backup2:/d2/iso/win98bootcd.iso .&lt;br /&gt;
scp backup2:/d2/iso/acronis_bootdisk.iso .&lt;br /&gt;
scp backup2:/d2/iso/memtest86-3.2.iso .&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving from one server to another ===&lt;br /&gt;
&lt;br /&gt;
Here are the steps you would take to move settings and data from one server to a new backup server:&lt;br /&gt;
&lt;br /&gt;
* rsync over all /data/customers (we do this cause if we didn&#039;t use *-file it would copy over the files AND the data in the mountpoint)&lt;br /&gt;
 rsync -av --progress --ignore-times *-file root@10.1.2.33:/data/customers/&lt;br /&gt;
after umounting all the customers, copy over the (empty) directories separately:&lt;br /&gt;
 for f in `find .  -type d`; do rsync -av $f root@69.55.229.25:/data/customers; done&lt;br /&gt;
&lt;br /&gt;
* copy mount script&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/nfs_backup_mounts.sh root@69.55.229.25:/etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* copy rc.local&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/rc.local root@69.55.229.25:/etc/rc.local&lt;br /&gt;
&lt;br /&gt;
* copy /etc/exports&lt;br /&gt;
 [root@backup3 /data/customers]# scp /etc/exports root@69.55.229.25:/etc/exports&lt;br /&gt;
&lt;br /&gt;
* edit /etc/hostname on both machines (set current to oldbackup3)&lt;br /&gt;
&lt;br /&gt;
* edit /etc/network/interfaces (swap IPs). &lt;br /&gt;
&lt;br /&gt;
* stop mounts from mounting on old and new servers so it doesnt start with reboot right away:&lt;br /&gt;
 chmod 000 /etc/nfs_backup_mounts.sh&lt;br /&gt;
&lt;br /&gt;
* reboot both servers @ same time&lt;br /&gt;
&lt;br /&gt;
* check everything out&lt;br /&gt;
&lt;br /&gt;
* run /etc/nfs_backup_mounts.sh on new server&lt;br /&gt;
&lt;br /&gt;
* if switch port changed update mrtg to reflect correct port pub nic is on (on p20):&lt;br /&gt;
 vi /usr/local/www/mgmt/mrtg/mrtg1.cfg&lt;br /&gt;
&lt;br /&gt;
= console = &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This box&#039;s only purpose is to serve as a means to connect to the digi serial multiplexer boxes at castle. Connect to it using the blue (cisco) ribbon cable with the beige RJ-45 to serial connector, 9600 8N1.&lt;br /&gt;
&lt;br /&gt;
* Location: castle, cab 3-8&lt;br /&gt;
* OS: SunOS 5.8 (solaris)&lt;br /&gt;
* Networking: Priv IP: 10.1.4.4&lt;br /&gt;
* Hardware: Sun Netra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to consoles, ssh in as user &#039;console&#039; and use the &amp;lt;tt&amp;gt;tip&amp;lt;/tt&amp;gt; command to connect to devices listed in &amp;lt;tt&amp;gt;/etc/remote&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
i.e.&lt;br /&gt;
 tip switch-p1&lt;br /&gt;
 tip jail1&lt;br /&gt;
&lt;br /&gt;
== Configuring digi/ports == &lt;br /&gt;
&lt;br /&gt;
=== /etc/remote ===&lt;br /&gt;
This is where the configuration/mapping for ports and custom names which we use along with the tip command to connect to various ports on the digi switches.&lt;br /&gt;
&lt;br /&gt;
We have 2 digi&#039;s at castle we connect to:&lt;br /&gt;
&lt;br /&gt;
 #3-7 10.1.4.10&lt;br /&gt;
 virt15:dv=/dev/dty/CO001s:br#38400:el=^C^S^Q^U^D:ie=%$:oe=^D:&lt;br /&gt;
 virt13:dv=/dev/dty/CO002s:br#115200:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
and &lt;br /&gt;
&lt;br /&gt;
 #3-6 10.1.4.11&lt;br /&gt;
 jail4:dv=/dev/dty/CP001s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
 jail16:dv=/dev/dty/CP002s:br#9600:el=^C^S^Q^U^D:ie=%$:oe=^D:hf:&lt;br /&gt;
&lt;br /&gt;
The only things you need to edit are the first part (i.e. &amp;lt;tt&amp;gt;jail4&amp;lt;/tt&amp;gt;) and the speed (i.e. &amp;lt;tt&amp;gt;9600&amp;lt;/tt&amp;gt;). You can decipher which port on the digi each line corresponds to by the &amp;lt;tt&amp;gt;CP001s or CO001s&amp;lt;/tt&amp;gt; (port 1 on digi1 and digi2), &amp;lt;tt&amp;gt;CP002s or CO002s&amp;lt;/tt&amp;gt; (port 2 on digi1 and digi2)&lt;br /&gt;
&lt;br /&gt;
=== drpadmin ===&lt;br /&gt;
The tool you use to configure a device to a digi box is drpadmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bash-2.03$ su&lt;br /&gt;
Password:&lt;br /&gt;
# drpadmin&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit : s&lt;br /&gt;
0       10.1.4.10       32      CO      771     never   1027&lt;br /&gt;
1       10.1.4.11       32      CP      771     never   1027&lt;br /&gt;
2       65.116.11.2     8       el      771     never   1027&lt;br /&gt;
&lt;br /&gt;
Please select an option (a)dd (d)elete (s)how (r)eset (q)uit :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use those commands above to modify the devices available.&lt;br /&gt;
&lt;br /&gt;
== Switching IP/hostname ==&lt;br /&gt;
&lt;br /&gt;
Edit:&lt;br /&gt;
 /etc/defaultrouter&lt;br /&gt;
 /etc/hosts&lt;br /&gt;
 /etc/hostname.hme0&lt;br /&gt;
 /etc/nodename&lt;br /&gt;
 Maybe needed to run: # ifconfig hme0 10.1.4.4 up&lt;br /&gt;
&lt;br /&gt;
= devweb =&lt;br /&gt;
&lt;br /&gt;
We do web development on devweb.johncompanies.com&lt;br /&gt;
&lt;br /&gt;
Currently this is a jail running on jail17 / 69.55.230.8&lt;br /&gt;
&lt;br /&gt;
If the jail is restarted, you will need to manually restart the web service with:&lt;br /&gt;
 httpsdctl restart&lt;br /&gt;
&lt;br /&gt;
All website development work should be done here first. It works exactly like and is setup like our [[Management_System_/_Public_Website_/_Signup_/_Account_Manager|main site]].&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=IPKVM&amp;diff=533</id>
		<title>IPKVM</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=IPKVM&amp;diff=533"/>
		<updated>2013-01-03T22:40:52Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
We have 3 Belkin F1DE101H IPKVMs:&lt;br /&gt;
&lt;br /&gt;
https://kvm1.johncompanies.com (@ i2b)&amp;lt;br&amp;gt;&lt;br /&gt;
https://kvm2.johncompanies.com (@ castle)&amp;lt;br&amp;gt;&lt;br /&gt;
https://kvm3.johncompanies.com (@ i2b)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Manual: http://cache-www.belkin.com/support/dl/p75075_f1de101h_man1.pdf&lt;br /&gt;
&lt;br /&gt;
Each kvm is accessed via a web interface. With the KVM you have keyboard/mouse/video virtually in a java applet. You can also mount up ISO images that then appear as a usb CD-ROM drive to the server/os. &lt;br /&gt;
&lt;br /&gt;
The KVMs have 4 cable/plugs: 1 video, 1 USB, and 1 PS/2 keyboard, 1 PS/2 mouse&lt;br /&gt;
&lt;br /&gt;
There are also &amp;quot;monitor&amp;quot; ports on the KVM, allowing someone at the data center to piggy-back on the KVM, seeing what the KVM sees (since the KVM will be occupying all PS2/video ports on the server). &lt;br /&gt;
&lt;br /&gt;
We use these KVMs internally when we need to load/rescue a server, and we also provide them to customers so they may load, rescue, troubleshoot their dedicated servers. We NEVER allow VPS customers to use the KVMs to access the host machine on which their VPS runs.&lt;br /&gt;
&lt;br /&gt;
The location and server to which each KVM is attached is located in a file on mail ~user/kvm&lt;br /&gt;
This is usually in screen p4 in the mailboxes screen. When we know a KVM is no longer in use, we place a &amp;quot;DONE&amp;quot; after its entry.&lt;br /&gt;
&lt;br /&gt;
There are a handful of options in the KVM we will modify on a regular basis:&lt;br /&gt;
&lt;br /&gt;
KVM Console: this will launch the viewer window- where you may interact with the server as though you were standing in front of it with a monitor/keyboard/mouse&lt;br /&gt;
&lt;br /&gt;
CD-ROM Image: on this screen we setup an ISO image to appear as a local USB drive to the server/OS. The options we provide are:&lt;br /&gt;
Share host: 69.55.230.10 (castle) or 69.55.229.4 (i2b)&amp;lt;br&amp;gt;&lt;br /&gt;
Share name: data&amp;lt;br&amp;gt;&lt;br /&gt;
Path to image: the file name of the ISO&amp;lt;br&amp;gt;&lt;br /&gt;
User, Password: (leave blank)&amp;lt;br&amp;gt;&lt;br /&gt;
Any ISO which you place on backup2:/data2/iso (castle) or backup3:/data/iso (i2b) will be available to the KVM for mounting.&lt;br /&gt;
&lt;br /&gt;
We periodically take this list and publish as http://johncompanies.com/knowledge/isos.html so customers know what is available. However, not all images are available at each location, as noted. &lt;br /&gt;
&lt;br /&gt;
If you or the customer wants to use their own ISO, we can either download that to the backup server or they can make their local CD-ROM drive appear on the server by using Belkin drive redirection software:&lt;br /&gt;
http://johncompanies.com/knowledge/Drive Redirection 1.0.5 Belkin.exe&lt;br /&gt;
&lt;br /&gt;
Users: each time we allocate the KVM to a new customer, we reset the password for the guest user. You may use anything, but usually we just use the customer&#039;s CID: col0xxxx. To change, select &#039;guest&#039; from the &#039;Existing users&#039;, enter password (and confirm) and click &#039;Modify&#039;. Note, the guest user has a lower level of access, for instance they cannot change KVM settings, like Keyboard/Mouse&lt;br /&gt;
&lt;br /&gt;
Keyboard/Mouse: on this screen we can adjust which emulation the KVM should make available to the server- USB or PS/2 or Auto. To change the setting, select Auto, USB or PS/2 from the &#039;Host Interface&#039; dropdown. Click &#039;Apply&#039; at the bottom of the screen to save. DON&#039;T CLICK &#039;Update&#039; - it won&#039;t save the setting. The customer, using the guest account, cannot modify this.&lt;br /&gt;
&lt;br /&gt;
Unit Reset: this screen gives options to reset parts of the IPKVM or the entire IPKVM. Usually we are resetting PS/2 or USB to get the keyboard to respond- rarely does the entire unit need to be reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes regarding assignment&lt;br /&gt;
&lt;br /&gt;
This is a floating KVM - we move it around on an as-needed basis. With 2 KVM&#039;s at i2b and 1 at castle, usually we don&#039;t have conflicts where multiple customers need to use it at exactly the same time. Castle does have their own IPKVM which we can also use.&lt;br /&gt;
&lt;br /&gt;
The steps for assigning our KVM to a new customer are:&lt;br /&gt;
&lt;br /&gt;
1. determine which KVM to use. Which KVM&#039;s are free/done/available? Note, we don&#039;t always mark a KVM &amp;quot;D(one)&amp;quot; (in the ~user/kvm file) since customers don&#039;t always say when they&#039;re done. So, you have to use a bit of judgement to know who was using it last and what for. If it was for a reload, they may still be using it. If it was to get back in after a crash or network config mistake, chances are they&#039;re done and you can take it. If in doubt, login to the KVM and see if it&#039;s actively being used.&lt;br /&gt;
&lt;br /&gt;
2. reset the guest password. This locks out the current (soon to be previous) user- we don&#039;t want them to be able to login to the KVM and control someone elses server.&lt;br /&gt;
&lt;br /&gt;
3. contact the data center asking them to move the kvm. Usually this will take the form of: &amp;quot;please move kvmN from cabinet A to col0XXX in cabinet B&amp;quot;. We usually email castle and use http://portal.i2bnetworks.com to notify i2b, but if you or the customer is on a rush, call the data center- i2b can be especially slow to handle tickets. castle/i2b phone numbers are in the ~user/kvm file on mail.&lt;br /&gt;
&lt;br /&gt;
4. confirm the KVM is up- usually we ping it and watch for it to start pinging again, it takes about 1min to boot up after being plugged in. Login, make sure the keyboard is working- if not adjust input and/or reset as necessary (Keyboard/Mouse, Unit Reset).&lt;br /&gt;
&lt;br /&gt;
5. contact the customer and send them the kvm email from pastes- EDITS: kvm, password, IP of share host: 69.55.230.10 (castle) or 69.55.229.4 (i2b) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes regarding usage&lt;br /&gt;
&lt;br /&gt;
Occasionally, even after plugging in the KVM and it appears it has power, it will not come up- the nic lights don&#039;t light up. If this happens ask the noc staff to pull power and/or use a paper clip to reset the unit.&lt;br /&gt;
&lt;br /&gt;
Some servers do not have legacy ports, therefore if the setting in Keyboard/Mouse was PS/2, the keyboard would not work. Conversely, some OSs don&#039;t recognize USB keyboards, you&#039;d want to force PS/2. Usually this takes effect right away, but occasionally you&#039;ll want to reset USB and/or PS/2 via Unit Reset. &lt;br /&gt;
&lt;br /&gt;
FreeBSD in particular will not recognize a PS/2 keyboard which wasn&#039;t present at OS boot. So you will need to either try USB first, or reboot to get PS/2 recognized.&lt;br /&gt;
&lt;br /&gt;
If ever things aren&#039;t working (no vid or kbd not working), ask the tech to confirm the cables are not plugged into the monitor port (the monitor ports are labeled &amp;quot;console&amp;quot;, and are left of the &amp;quot;CPU/KVM&amp;quot; ports- which go to the server).&lt;br /&gt;
&lt;br /&gt;
To get BIOS to recognize the USB CD-ROM, you may need to tweak several settings in the BIOS screens.&lt;br /&gt;
Options vary per hardware, some options to check:&lt;br /&gt;
Boot optical: enable&amp;lt;br&amp;gt;&lt;br /&gt;
Boot removable: enable&amp;lt;br&amp;gt;&lt;br /&gt;
Boot network: disable&amp;lt;br&amp;gt;&lt;br /&gt;
USB boot: enable&amp;lt;br&amp;gt;&lt;br /&gt;
Boot USB first: enable&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the boot menu, make “Belkin Virtual” (or whatever it&#039;s recognized as) first in boot order. In order for the BIOS to see the CD-ROM, it must be configured via the IPKVM before you reboot the server&lt;br /&gt;
&lt;br /&gt;
Usually a frozen server will not respond to a ctrl+alt+del (both from kbd sequence and also from the button in the KVM applet), just like it wouldn&#039;t if a real kbd was attached.&lt;br /&gt;
&lt;br /&gt;
If you logout or timeout you&#039;ll need to remount the image. Some OS/MB combinations don&#039;t like the USB drive method. In these cases we suggest using the ftp/netinstall setup option to avoid having to access the CD/USB drive. OS&#039;s known to have this issue: Debian, FreeBSD&lt;br /&gt;
&lt;br /&gt;
If you need to communicate with the customer, 2 people can use the KVM applet at the same time and there&#039;s a chat window available from the options drop down menu.&lt;br /&gt;
&lt;br /&gt;
If ever you find that you are locked out of keyboard access after attaching an ISO image (this sometimes happens on modern motherboards which do not have any ps/2 connectors) you can usually get keyboard back by doing one or more of the following:&lt;br /&gt;
&lt;br /&gt;
* reset the usb (in the reset menu)&lt;br /&gt;
* &amp;quot;reactivate&amp;quot; the ISO image&lt;br /&gt;
* reset the entire kvm&lt;br /&gt;
* sometimes attaching a physical keyboard to the system (then rebooting with that keyboard attached) solves the problem&lt;br /&gt;
* use 2 IPKVMs: 1 providing the ISO and the other acting as video/mouse&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=IPKVM&amp;diff=532</id>
		<title>IPKVM</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=IPKVM&amp;diff=532"/>
		<updated>2013-01-03T22:40:36Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: Created page with &amp;quot; We have 3 Belkin F1DE101H IPKVMs:  https://kvm1.johncompanies.com (@ i2b) https://kvm2.johncompanies.com (@ castle) https://kvm3.johncompanies.com (@ i2b)  Manual: http://cac...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
We have 3 Belkin F1DE101H IPKVMs:&lt;br /&gt;
&lt;br /&gt;
https://kvm1.johncompanies.com (@ i2b)&lt;br /&gt;
https://kvm2.johncompanies.com (@ castle)&lt;br /&gt;
https://kvm3.johncompanies.com (@ i2b)&lt;br /&gt;
&lt;br /&gt;
Manual: http://cache-www.belkin.com/support/dl/p75075_f1de101h_man1.pdf&lt;br /&gt;
&lt;br /&gt;
Each kvm is accessed via a web interface. With the KVM you have keyboard/mouse/video virtually in a java applet. You can also mount up ISO images that then appear as a usb CD-ROM drive to the server/os. &lt;br /&gt;
&lt;br /&gt;
The KVMs have 4 cable/plugs: 1 video, 1 USB, and 1 PS/2 keyboard, 1 PS/2 mouse&lt;br /&gt;
&lt;br /&gt;
There are also &amp;quot;monitor&amp;quot; ports on the KVM, allowing someone at the data center to piggy-back on the KVM, seeing what the KVM sees (since the KVM will be occupying all PS2/video ports on the server). &lt;br /&gt;
&lt;br /&gt;
We use these KVMs internally when we need to load/rescue a server, and we also provide them to customers so they may load, rescue, troubleshoot their dedicated servers. We NEVER allow VPS customers to use the KVMs to access the host machine on which their VPS runs.&lt;br /&gt;
&lt;br /&gt;
The location and server to which each KVM is attached is located in a file on mail ~user/kvm&lt;br /&gt;
This is usually in screen p4 in the mailboxes screen. When we know a KVM is no longer in use, we place a &amp;quot;DONE&amp;quot; after its entry.&lt;br /&gt;
&lt;br /&gt;
There are a handful of options in the KVM we will modify on a regular basis:&lt;br /&gt;
&lt;br /&gt;
KVM Console: this will launch the viewer window- where you may interact with the server as though you were standing in front of it with a monitor/keyboard/mouse&lt;br /&gt;
&lt;br /&gt;
CD-ROM Image: on this screen we setup an ISO image to appear as a local USB drive to the server/OS. The options we provide are:&lt;br /&gt;
Share host: 69.55.230.10 (castle) or 69.55.229.4 (i2b)&amp;lt;br&amp;gt;&lt;br /&gt;
Share name: data&amp;lt;br&amp;gt;&lt;br /&gt;
Path to image: the file name of the ISO&amp;lt;br&amp;gt;&lt;br /&gt;
User, Password: (leave blank)&amp;lt;br&amp;gt;&lt;br /&gt;
Any ISO which you place on backup2:/data2/iso (castle) or backup3:/data/iso (i2b) will be available to the KVM for mounting.&lt;br /&gt;
&lt;br /&gt;
We periodically take this list and publish as http://johncompanies.com/knowledge/isos.html so customers know what is available. However, not all images are available at each location, as noted. &lt;br /&gt;
&lt;br /&gt;
If you or the customer wants to use their own ISO, we can either download that to the backup server or they can make their local CD-ROM drive appear on the server by using Belkin drive redirection software:&lt;br /&gt;
http://johncompanies.com/knowledge/Drive Redirection 1.0.5 Belkin.exe&lt;br /&gt;
&lt;br /&gt;
Users: each time we allocate the KVM to a new customer, we reset the password for the guest user. You may use anything, but usually we just use the customer&#039;s CID: col0xxxx. To change, select &#039;guest&#039; from the &#039;Existing users&#039;, enter password (and confirm) and click &#039;Modify&#039;. Note, the guest user has a lower level of access, for instance they cannot change KVM settings, like Keyboard/Mouse&lt;br /&gt;
&lt;br /&gt;
Keyboard/Mouse: on this screen we can adjust which emulation the KVM should make available to the server- USB or PS/2 or Auto. To change the setting, select Auto, USB or PS/2 from the &#039;Host Interface&#039; dropdown. Click &#039;Apply&#039; at the bottom of the screen to save. DON&#039;T CLICK &#039;Update&#039; - it won&#039;t save the setting. The customer, using the guest account, cannot modify this.&lt;br /&gt;
&lt;br /&gt;
Unit Reset: this screen gives options to reset parts of the IPKVM or the entire IPKVM. Usually we are resetting PS/2 or USB to get the keyboard to respond- rarely does the entire unit need to be reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes regarding assignment&lt;br /&gt;
&lt;br /&gt;
This is a floating KVM - we move it around on an as-needed basis. With 2 KVM&#039;s at i2b and 1 at castle, usually we don&#039;t have conflicts where multiple customers need to use it at exactly the same time. Castle does have their own IPKVM which we can also use.&lt;br /&gt;
&lt;br /&gt;
The steps for assigning our KVM to a new customer are:&lt;br /&gt;
&lt;br /&gt;
1. determine which KVM to use. Which KVM&#039;s are free/done/available? Note, we don&#039;t always mark a KVM &amp;quot;D(one)&amp;quot; (in the ~user/kvm file) since customers don&#039;t always say when they&#039;re done. So, you have to use a bit of judgement to know who was using it last and what for. If it was for a reload, they may still be using it. If it was to get back in after a crash or network config mistake, chances are they&#039;re done and you can take it. If in doubt, login to the KVM and see if it&#039;s actively being used.&lt;br /&gt;
&lt;br /&gt;
2. reset the guest password. This locks out the current (soon to be previous) user- we don&#039;t want them to be able to login to the KVM and control someone elses server.&lt;br /&gt;
&lt;br /&gt;
3. contact the data center asking them to move the kvm. Usually this will take the form of: &amp;quot;please move kvmN from cabinet A to col0XXX in cabinet B&amp;quot;. We usually email castle and use http://portal.i2bnetworks.com to notify i2b, but if you or the customer is on a rush, call the data center- i2b can be especially slow to handle tickets. castle/i2b phone numbers are in the ~user/kvm file on mail.&lt;br /&gt;
&lt;br /&gt;
4. confirm the KVM is up- usually we ping it and watch for it to start pinging again, it takes about 1min to boot up after being plugged in. Login, make sure the keyboard is working- if not adjust input and/or reset as necessary (Keyboard/Mouse, Unit Reset).&lt;br /&gt;
&lt;br /&gt;
5. contact the customer and send them the kvm email from pastes- EDITS: kvm, password, IP of share host: 69.55.230.10 (castle) or 69.55.229.4 (i2b) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notes regarding usage&lt;br /&gt;
&lt;br /&gt;
Occasionally, even after plugging in the KVM and it appears it has power, it will not come up- the nic lights don&#039;t light up. If this happens ask the noc staff to pull power and/or use a paper clip to reset the unit.&lt;br /&gt;
&lt;br /&gt;
Some servers do not have legacy ports, therefore if the setting in Keyboard/Mouse was PS/2, the keyboard would not work. Conversely, some OSs don&#039;t recognize USB keyboards, you&#039;d want to force PS/2. Usually this takes effect right away, but occasionally you&#039;ll want to reset USB and/or PS/2 via Unit Reset. &lt;br /&gt;
&lt;br /&gt;
FreeBSD in particular will not recognize a PS/2 keyboard which wasn&#039;t present at OS boot. So you will need to either try USB first, or reboot to get PS/2 recognized.&lt;br /&gt;
&lt;br /&gt;
If ever things aren&#039;t working (no vid or kbd not working), ask the tech to confirm the cables are not plugged into the monitor port (the monitor ports are labeled &amp;quot;console&amp;quot;, and are left of the &amp;quot;CPU/KVM&amp;quot; ports- which go to the server).&lt;br /&gt;
&lt;br /&gt;
To get BIOS to recognize the USB CD-ROM, you may need to tweak several settings in the BIOS screens.&lt;br /&gt;
Options vary per hardware, some options to check:&lt;br /&gt;
Boot optical: enable&amp;lt;br&amp;gt;&lt;br /&gt;
Boot removable: enable&amp;lt;br&amp;gt;&lt;br /&gt;
Boot network: disable&amp;lt;br&amp;gt;&lt;br /&gt;
USB boot: enable&amp;lt;br&amp;gt;&lt;br /&gt;
Boot USB first: enable&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the boot menu, make “Belkin Virtual” (or whatever it&#039;s recognized as) first in boot order. In order for the BIOS to see the CD-ROM, it must be configured via the IPKVM before you reboot the server&lt;br /&gt;
&lt;br /&gt;
Usually a frozen server will not respond to a ctrl+alt+del (both from kbd sequence and also from the button in the KVM applet), just like it wouldn&#039;t if a real kbd was attached.&lt;br /&gt;
&lt;br /&gt;
If you logout or timeout you&#039;ll need to remount the image. Some OS/MB combinations don&#039;t like the USB drive method. In these cases we suggest using the ftp/netinstall setup option to avoid having to access the CD/USB drive. OS&#039;s known to have this issue: Debian, FreeBSD&lt;br /&gt;
&lt;br /&gt;
If you need to communicate with the customer, 2 people can use the KVM applet at the same time and there&#039;s a chat window available from the options drop down menu.&lt;br /&gt;
&lt;br /&gt;
If ever you find that you are locked out of keyboard access after attaching an ISO image (this sometimes happens on modern motherboards which do not have any ps/2 connectors) you can usually get keyboard back by doing one or more of the following:&lt;br /&gt;
&lt;br /&gt;
* reset the usb (in the reset menu)&lt;br /&gt;
* &amp;quot;reactivate&amp;quot; the ISO image&lt;br /&gt;
* reset the entire kvm&lt;br /&gt;
* sometimes attaching a physical keyboard to the system (then rebooting with that keyboard attached) solves the problem&lt;br /&gt;
* use 2 IPKVMs: 1 providing the ISO and the other acting as video/mouse&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Shutting_Down_Service&amp;diff=518</id>
		<title>Shutting Down Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Shutting_Down_Service&amp;diff=518"/>
		<updated>2012-12-28T17:45:54Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Dedicated Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Dedicated Server =&lt;br /&gt;
&lt;br /&gt;
When a dedicated customer shuts down service, we use the cancel date in management as the reminder date to shut the server off. When the &amp;quot;SHUTDOWN TODAY&amp;quot; email is received, the server should be powered down by NOC staff on that day (unless prior arrangements have been made to keep the server up or down for another reason). Also, billing should be stopped on that date to avoid future billing. You may remove the next bill date, or delete the sub to stop billing.&lt;br /&gt;
&lt;br /&gt;
The server should remain in cancelled but not stopped status until the server is physically pulled from the DC. The reason for this is the cancelled status is a reminder that we need to pull the hardware out of the DC. &lt;br /&gt;
&lt;br /&gt;
After the hardware is pulled the following steps should be taken:&lt;br /&gt;
&lt;br /&gt;
* stop the system in management (this will mark the customer as cancelled if this was the last active server)&lt;br /&gt;
&lt;br /&gt;
* remove the description label for the switch port:&lt;br /&gt;
Assuming they&#039;re on port 21 on switch p23:&lt;br /&gt;
&amp;lt;pre&amp;gt;en&lt;br /&gt;
conf t&lt;br /&gt;
interface fa0/21&lt;br /&gt;
no description&lt;br /&gt;
exit&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If they also had an RMM/DRAC repeat the process for the other port. Running a &amp;lt;tt&amp;gt;show run&amp;lt;/tt&amp;gt; should show you which ports the customer is labeled for.&lt;br /&gt;
&lt;br /&gt;
* destroy the nfs data mount and data, if applicable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /data/customers/col00xxx&lt;br /&gt;
rmdir /data/customers/col00xxx&lt;br /&gt;
rm /data/customers/col00xxx-file&lt;br /&gt;
vi /etc/exports (remove entry)&lt;br /&gt;
vi  /etc/nfs_backup_mounts.sh (remove entries - 2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the umount fails, restart the nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
* remove DNS entries:&lt;br /&gt;
 rmdomains col00xxx&lt;br /&gt;
 vi /etc/namedb/named.conf (remove all domains for customer)&lt;br /&gt;
See if they have a reverse/PTR setup: &amp;lt;tt&amp;gt;host x.x.x.x&amp;lt;/tt&amp;gt;&lt;br /&gt;
If so, &lt;br /&gt;
 ptr x.x.x.x&lt;br /&gt;
And set back to default&lt;br /&gt;
&lt;br /&gt;
* remove the server from the [[Cabinetmap]]&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Shutting_Down_Service&amp;diff=516</id>
		<title>Shutting Down Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Shutting_Down_Service&amp;diff=516"/>
		<updated>2012-12-28T17:40:58Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Dedicated Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Dedicated Server =&lt;br /&gt;
&lt;br /&gt;
When a dedicated customer shuts down service, we use the cancel date in management as the reminder date to shut the server off. When the &amp;quot;SHUTDOWN TODAY&amp;quot; email is received, the server should be powered down by NOC staff on that day (unless prior arrangements have been made to keep the server up or down for another reason). Also, billing should be stopped on that date to avoid future billing. You may remove the next bill date, or delete the sub to stop billing.&lt;br /&gt;
&lt;br /&gt;
The server should remain in cancelled but not stopped status until the server is physically pulled from the DC. The reason for this is the cancelled status is a reminder that we need to pull the hardware out of the DC. &lt;br /&gt;
&lt;br /&gt;
After the hardware is pulled the following steps should be taken:&lt;br /&gt;
&lt;br /&gt;
* stop the system in management (this will mark the customer as cancelled if this was the last active server)&lt;br /&gt;
&lt;br /&gt;
* remove the description label for the switch port:&lt;br /&gt;
Assuming they&#039;re on port 21 on switch p23:&lt;br /&gt;
&amp;lt;pre&amp;gt;en&lt;br /&gt;
conf t&lt;br /&gt;
interface fa0/21&lt;br /&gt;
no description&lt;br /&gt;
exit&lt;br /&gt;
write memory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If they also had an RMM/DRAC repeat the process for the other port. Running a &amp;lt;tt&amp;gt;show run&amp;lt;/tt&amp;gt; should show you which ports the customer is labeled for.&lt;br /&gt;
&lt;br /&gt;
* destroy the nfs data mount and data, if applicable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /data/customers/col00xxx&lt;br /&gt;
rmdir /data/customers/col00xxx&lt;br /&gt;
rm /data/customers/col00xxx-file&lt;br /&gt;
vi /etc/exports (remove entry)&lt;br /&gt;
vi  /etc/nfs_backup_mounts.sh (remove entries - 2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the umount fails, restart the nfsd:&lt;br /&gt;
 /etc/init.d/nfs-kernel-server restart&lt;br /&gt;
&lt;br /&gt;
* remove DNS entries:&lt;br /&gt;
 listdomains col00xxx&lt;br /&gt;
 vi /etc/namedb/named.conf (remove all domains for customer)&lt;br /&gt;
See if they have a reverse/PTR setup: &amp;lt;tt&amp;gt;host x.x.x.x&amp;lt;/tt&amp;gt;&lt;br /&gt;
If so, &lt;br /&gt;
 ptr x.x.x.x&lt;br /&gt;
And set back to default&lt;br /&gt;
&lt;br /&gt;
* remove the server from the [[Cabinetmap]]&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Colo_Server_Setup&amp;diff=449</id>
		<title>Colo Server Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Colo_Server_Setup&amp;diff=449"/>
		<updated>2012-12-10T03:24:56Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Post install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BIOS =&lt;br /&gt;
You will want to adjust the following settings (where supported):&lt;br /&gt;
&lt;br /&gt;
* set the date and time to GMT&lt;br /&gt;
* disable quiet boot&lt;br /&gt;
* set the resume on power loss option to &#039;&#039;last state&#039;&#039; (this ensures that if the DC loses power, the server will turn on when power is restored, and more importantly the same will happen when the ATS port is power cycled).&lt;br /&gt;
* make sure USB is not disabled (to allow KVM ISO mount/boot)&lt;br /&gt;
* optionally, disable ROM option for NICs so they don&#039;t waste time trying to pxe boot&lt;br /&gt;
* disable booting to network &lt;br /&gt;
* adjust the boot order to boot first to HD/RAID. Note: if you&#039;re booting to KVM ISO you will have to reboot after the ISO is mounted before you see the Belkin device show up as a bootable device (which you can then move up in the boot order)&lt;br /&gt;
&lt;br /&gt;
= Install the OS =&lt;br /&gt;
&lt;br /&gt;
Refer to [[IPKVM]] for details on how to use it to do the install.&lt;br /&gt;
&lt;br /&gt;
RAID setup (if equipped)&lt;br /&gt;
After you exit the BIOS screen you will see the RAID (3ware) BIOS screen. To enter the configuration press Alt-3.&lt;br /&gt;
There you will be able to create a new mirror from the drives provided. To do this, move the cursor to each drive and hit the spacebar to select each drive (should be *&#039;d after selecting) then tab down to the menu at the bottom to Create Array. It should be a RAID1 (mirror) with write cache disabled (unless there is a backup battery). Use default options for all other settings. No need to give it a name. When done setting up the options, press F8 to save and exit.&lt;br /&gt;
&lt;br /&gt;
Do a minimal install of whatever OS the customer has selected. Don&#039;t install packages beyond the basics (i.e. openssh)&lt;br /&gt;
&lt;br /&gt;
It&#039;ll be a crapshoot which ethernet device (if there are multiple) is the active one. You basically have to guess and assign an IP to one and immediately after configuring it go ping it. If it&#039;s pinging, you guessed right. If not, you can either go back and give the IP to the other nic (this may not work since the other nic may still have the same IP) or you can ask the DC to swap the cat5 cable to the other port.&lt;br /&gt;
&lt;br /&gt;
When requested to setup a new user, choose &#039;user&#039;.&lt;br /&gt;
All passwords for user/root are newrootNNNN where the NNNN is the sig. digits from the CID. So if the new CID is col001234 the password is: newroot1234&lt;br /&gt;
&lt;br /&gt;
When setting up Ubu, make sure to set the first (or boot partition) bootable (set bootable flag).&lt;br /&gt;
&lt;br /&gt;
If the customer has not requested that you add more than 1 IP initially (with a valid reason) then just add the 1 IP (or the number they requested if applicable.)&lt;br /&gt;
&lt;br /&gt;
FreeBSD systems will require you to complete the OS load over ftp since the OS won&#039;t recognize the IPKVM&#039;s ISO as a CD drive (this despite the fact that it clearly booted to it initially). This is why we use &amp;quot;netboot&amp;quot; ISOs.&lt;br /&gt;
&lt;br /&gt;
After the OS is installed, login and install the proper RAID checking script, if applicable. In most cases it&#039;s a 3ware card. The correct file will depend on the distribution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
backup2 /d4/build/3ware# ls&lt;br /&gt;
9.5.0.1-freebsd64-9690-Upgrade.zip t&lt;br /&gt;
9.5.0.1-linux32-9690-Upgrade.zip   tw_cli-freebsd-800x-32_64.tgz&lt;br /&gt;
Lib_Utils-1.00-08.noarch.rpm       tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
MegaCli-8.00.40-1.i386.rpm         tw_cli-linux-x86-9.4.1.tgz&lt;br /&gt;
checkraid.sh                       tw_cli-linux-x86-9.5.0.1.tgz&lt;br /&gt;
cli_freebsd_10.2.zip               tw_cli-linux-x86-9.5.1.1.tgz&lt;br /&gt;
driver-freebsd_6x-9.4.1.3.tgz      tw_cli-linux-x86_64-9.5.3.tgz&lt;br /&gt;
new&lt;br /&gt;
backup2 /d4/build/3ware#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So in the case of linux on 64bit, upload &amp;lt;tt&amp;gt;tw_cli-linux-x86_64-9.5.3.tgz&amp;lt;/tt&amp;gt; to their server and unpack in &amp;lt;tt&amp;gt;/usr/lcoal/sbin&amp;lt;/tt&amp;gt; then run &amp;lt;tt&amp;gt;checkraid.sh&amp;lt;/tt&amp;gt; once to confirm it&#039;s working. If not, edit it to reflect the correct controller #. For exanple, run &amp;lt;tt&amp;gt;tw_cli info&amp;lt;/tt&amp;gt; which will give you output like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[root@backup1 ~]# tw_cli  info&lt;br /&gt;
&lt;br /&gt;
Ctl   Model        (V)Ports  Drives   Units   NotOpt  RRate   VRate  BBU&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
c0    9650SE-8LPML 8         6        1       0       5       1      -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, edit &amp;lt;tt&amp;gt;checkraid.sh&amp;lt;/tt&amp;gt; so all instances say &amp;lt;tt&amp;gt;c0&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;c4&amp;lt;/tt&amp;gt;, for example.&lt;br /&gt;
&lt;br /&gt;
You may need to create &amp;lt;tt&amp;gt;/usr/local/sbin&amp;lt;/tt&amp;gt; on some OS&#039;s&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to add to /etc/resolv.conf:&lt;br /&gt;
 nameserver 69.55.225.225&lt;br /&gt;
 nameserver 69.55.230.3&lt;br /&gt;
&lt;br /&gt;
= Post install =&lt;br /&gt;
&lt;br /&gt;
* update the system record in mgmt to reflect the correct asset tag, ATS port, cabinet and newly-assigned IP. You can keep the notes or not, but at least keep the disk partition and OS note. Leave the password field blank. If this asset isn&#039;t in the database, you may be prompted to add it first.&lt;br /&gt;
* update [[Cabinetmap]] with location of server, also label switch port and ATS port&lt;br /&gt;
* reboot the server and in the process of posting, power down, then power up the port using ATS controls to confirm the server is assigned to the right ATS port.&lt;br /&gt;
* make sure billing is all set&lt;br /&gt;
* send welcome email (use &amp;quot;colo welcome&amp;quot; from big pastes page).&lt;br /&gt;
* mark KVM as unused in KVM notes screen (A0P4)&lt;br /&gt;
* add server colo (and hostname if multiple servers) to description field on cisco port:&lt;br /&gt;
Go to the serial console for the switch they&#039;re connected to (refer to cabinet map as to which switch is in that cabinet):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
switch-p26&amp;gt;en&lt;br /&gt;
Password:&lt;br /&gt;
switch-p26#conf t&lt;br /&gt;
Enter configuration commands, one per line.  End with CNTL/Z.&lt;br /&gt;
switch-p26(config)#int fa0/11&lt;br /&gt;
switch-p26(config-if)#des col02171&lt;br /&gt;
switch-p26(config-if)#en&lt;br /&gt;
switch-p26#wr me&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* put a note to add a colo label to the server (or ask DC staff to do it- front and back). Also label hostname if cust has mult servers at DC&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Colo_Server_Setup&amp;diff=448</id>
		<title>Colo Server Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Colo_Server_Setup&amp;diff=448"/>
		<updated>2012-12-10T03:24:31Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Post install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BIOS =&lt;br /&gt;
You will want to adjust the following settings (where supported):&lt;br /&gt;
&lt;br /&gt;
* set the date and time to GMT&lt;br /&gt;
* disable quiet boot&lt;br /&gt;
* set the resume on power loss option to &#039;&#039;last state&#039;&#039; (this ensures that if the DC loses power, the server will turn on when power is restored, and more importantly the same will happen when the ATS port is power cycled).&lt;br /&gt;
* make sure USB is not disabled (to allow KVM ISO mount/boot)&lt;br /&gt;
* optionally, disable ROM option for NICs so they don&#039;t waste time trying to pxe boot&lt;br /&gt;
* disable booting to network &lt;br /&gt;
* adjust the boot order to boot first to HD/RAID. Note: if you&#039;re booting to KVM ISO you will have to reboot after the ISO is mounted before you see the Belkin device show up as a bootable device (which you can then move up in the boot order)&lt;br /&gt;
&lt;br /&gt;
= Install the OS =&lt;br /&gt;
&lt;br /&gt;
Refer to [[IPKVM]] for details on how to use it to do the install.&lt;br /&gt;
&lt;br /&gt;
RAID setup (if equipped)&lt;br /&gt;
After you exit the BIOS screen you will see the RAID (3ware) BIOS screen. To enter the configuration press Alt-3.&lt;br /&gt;
There you will be able to create a new mirror from the drives provided. To do this, move the cursor to each drive and hit the spacebar to select each drive (should be *&#039;d after selecting) then tab down to the menu at the bottom to Create Array. It should be a RAID1 (mirror) with write cache disabled (unless there is a backup battery). Use default options for all other settings. No need to give it a name. When done setting up the options, press F8 to save and exit.&lt;br /&gt;
&lt;br /&gt;
Do a minimal install of whatever OS the customer has selected. Don&#039;t install packages beyond the basics (i.e. openssh)&lt;br /&gt;
&lt;br /&gt;
It&#039;ll be a crapshoot which ethernet device (if there are multiple) is the active one. You basically have to guess and assign an IP to one and immediately after configuring it go ping it. If it&#039;s pinging, you guessed right. If not, you can either go back and give the IP to the other nic (this may not work since the other nic may still have the same IP) or you can ask the DC to swap the cat5 cable to the other port.&lt;br /&gt;
&lt;br /&gt;
When requested to setup a new user, choose &#039;user&#039;.&lt;br /&gt;
All passwords for user/root are newrootNNNN where the NNNN is the sig. digits from the CID. So if the new CID is col001234 the password is: newroot1234&lt;br /&gt;
&lt;br /&gt;
When setting up Ubu, make sure to set the first (or boot partition) bootable (set bootable flag).&lt;br /&gt;
&lt;br /&gt;
If the customer has not requested that you add more than 1 IP initially (with a valid reason) then just add the 1 IP (or the number they requested if applicable.)&lt;br /&gt;
&lt;br /&gt;
FreeBSD systems will require you to complete the OS load over ftp since the OS won&#039;t recognize the IPKVM&#039;s ISO as a CD drive (this despite the fact that it clearly booted to it initially). This is why we use &amp;quot;netboot&amp;quot; ISOs.&lt;br /&gt;
&lt;br /&gt;
After the OS is installed, login and install the proper RAID checking script, if applicable. In most cases it&#039;s a 3ware card. The correct file will depend on the distribution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
backup2 /d4/build/3ware# ls&lt;br /&gt;
9.5.0.1-freebsd64-9690-Upgrade.zip t&lt;br /&gt;
9.5.0.1-linux32-9690-Upgrade.zip   tw_cli-freebsd-800x-32_64.tgz&lt;br /&gt;
Lib_Utils-1.00-08.noarch.rpm       tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
MegaCli-8.00.40-1.i386.rpm         tw_cli-linux-x86-9.4.1.tgz&lt;br /&gt;
checkraid.sh                       tw_cli-linux-x86-9.5.0.1.tgz&lt;br /&gt;
cli_freebsd_10.2.zip               tw_cli-linux-x86-9.5.1.1.tgz&lt;br /&gt;
driver-freebsd_6x-9.4.1.3.tgz      tw_cli-linux-x86_64-9.5.3.tgz&lt;br /&gt;
new&lt;br /&gt;
backup2 /d4/build/3ware#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So in the case of linux on 64bit, upload &amp;lt;tt&amp;gt;tw_cli-linux-x86_64-9.5.3.tgz&amp;lt;/tt&amp;gt; to their server and unpack in &amp;lt;tt&amp;gt;/usr/lcoal/sbin&amp;lt;/tt&amp;gt; then run &amp;lt;tt&amp;gt;checkraid.sh&amp;lt;/tt&amp;gt; once to confirm it&#039;s working. If not, edit it to reflect the correct controller #. For exanple, run &amp;lt;tt&amp;gt;tw_cli info&amp;lt;/tt&amp;gt; which will give you output like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[root@backup1 ~]# tw_cli  info&lt;br /&gt;
&lt;br /&gt;
Ctl   Model        (V)Ports  Drives   Units   NotOpt  RRate   VRate  BBU&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
c0    9650SE-8LPML 8         6        1       0       5       1      -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, edit &amp;lt;tt&amp;gt;checkraid.sh&amp;lt;/tt&amp;gt; so all instances say &amp;lt;tt&amp;gt;c0&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;c4&amp;lt;/tt&amp;gt;, for example.&lt;br /&gt;
&lt;br /&gt;
You may need to create &amp;lt;tt&amp;gt;/usr/local/sbin&amp;lt;/tt&amp;gt; on some OS&#039;s&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to add to /etc/resolv.conf:&lt;br /&gt;
 nameserver 69.55.225.225&lt;br /&gt;
 nameserver 69.55.230.3&lt;br /&gt;
&lt;br /&gt;
= Post install =&lt;br /&gt;
&lt;br /&gt;
* update the system record in mgmt to reflect the correct asset tag, ATS port, cabinet and newly-assigned IP. You can keep the notes or not, but at least keep the disk partition and OS note. Leave the password field blank.&lt;br /&gt;
* update [[Cabinetmap]] with location of server, also label switch port and ATS port&lt;br /&gt;
* reboot the server and in the process of posting, power down, then power up the port using ATS controls to confirm the server is assigned to the right ATS port.&lt;br /&gt;
* make sure billing is all set&lt;br /&gt;
* send welcome email (use &amp;quot;colo welcome&amp;quot; from big pastes page).&lt;br /&gt;
* mark KVM as unused in KVM notes screen (A0P4)&lt;br /&gt;
* add server colo (and hostname if multiple servers) to description field on cisco port:&lt;br /&gt;
Go to the serial console for the switch they&#039;re connected to (refer to cabinet map as to which switch is in that cabinet):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
switch-p26&amp;gt;en&lt;br /&gt;
Password:&lt;br /&gt;
switch-p26#conf t&lt;br /&gt;
Enter configuration commands, one per line.  End with CNTL/Z.&lt;br /&gt;
switch-p26(config)#int fa0/11&lt;br /&gt;
switch-p26(config-if)#des col02171&lt;br /&gt;
switch-p26(config-if)#en&lt;br /&gt;
switch-p26#wr me&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* put a note to add a colo label to the server (or ask DC staff to do it- front and back). Also label hostname if cust has mult servers at DC&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Colo_Server_Setup&amp;diff=447</id>
		<title>Colo Server Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Colo_Server_Setup&amp;diff=447"/>
		<updated>2012-12-10T03:24:01Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Post install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BIOS =&lt;br /&gt;
You will want to adjust the following settings (where supported):&lt;br /&gt;
&lt;br /&gt;
* set the date and time to GMT&lt;br /&gt;
* disable quiet boot&lt;br /&gt;
* set the resume on power loss option to &#039;&#039;last state&#039;&#039; (this ensures that if the DC loses power, the server will turn on when power is restored, and more importantly the same will happen when the ATS port is power cycled).&lt;br /&gt;
* make sure USB is not disabled (to allow KVM ISO mount/boot)&lt;br /&gt;
* optionally, disable ROM option for NICs so they don&#039;t waste time trying to pxe boot&lt;br /&gt;
* disable booting to network &lt;br /&gt;
* adjust the boot order to boot first to HD/RAID. Note: if you&#039;re booting to KVM ISO you will have to reboot after the ISO is mounted before you see the Belkin device show up as a bootable device (which you can then move up in the boot order)&lt;br /&gt;
&lt;br /&gt;
= Install the OS =&lt;br /&gt;
&lt;br /&gt;
Refer to [[IPKVM]] for details on how to use it to do the install.&lt;br /&gt;
&lt;br /&gt;
RAID setup (if equipped)&lt;br /&gt;
After you exit the BIOS screen you will see the RAID (3ware) BIOS screen. To enter the configuration press Alt-3.&lt;br /&gt;
There you will be able to create a new mirror from the drives provided. To do this, move the cursor to each drive and hit the spacebar to select each drive (should be *&#039;d after selecting) then tab down to the menu at the bottom to Create Array. It should be a RAID1 (mirror) with write cache disabled (unless there is a backup battery). Use default options for all other settings. No need to give it a name. When done setting up the options, press F8 to save and exit.&lt;br /&gt;
&lt;br /&gt;
Do a minimal install of whatever OS the customer has selected. Don&#039;t install packages beyond the basics (i.e. openssh)&lt;br /&gt;
&lt;br /&gt;
It&#039;ll be a crapshoot which ethernet device (if there are multiple) is the active one. You basically have to guess and assign an IP to one and immediately after configuring it go ping it. If it&#039;s pinging, you guessed right. If not, you can either go back and give the IP to the other nic (this may not work since the other nic may still have the same IP) or you can ask the DC to swap the cat5 cable to the other port.&lt;br /&gt;
&lt;br /&gt;
When requested to setup a new user, choose &#039;user&#039;.&lt;br /&gt;
All passwords for user/root are newrootNNNN where the NNNN is the sig. digits from the CID. So if the new CID is col001234 the password is: newroot1234&lt;br /&gt;
&lt;br /&gt;
When setting up Ubu, make sure to set the first (or boot partition) bootable (set bootable flag).&lt;br /&gt;
&lt;br /&gt;
If the customer has not requested that you add more than 1 IP initially (with a valid reason) then just add the 1 IP (or the number they requested if applicable.)&lt;br /&gt;
&lt;br /&gt;
FreeBSD systems will require you to complete the OS load over ftp since the OS won&#039;t recognize the IPKVM&#039;s ISO as a CD drive (this despite the fact that it clearly booted to it initially). This is why we use &amp;quot;netboot&amp;quot; ISOs.&lt;br /&gt;
&lt;br /&gt;
After the OS is installed, login and install the proper RAID checking script, if applicable. In most cases it&#039;s a 3ware card. The correct file will depend on the distribution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
backup2 /d4/build/3ware# ls&lt;br /&gt;
9.5.0.1-freebsd64-9690-Upgrade.zip t&lt;br /&gt;
9.5.0.1-linux32-9690-Upgrade.zip   tw_cli-freebsd-800x-32_64.tgz&lt;br /&gt;
Lib_Utils-1.00-08.noarch.rpm       tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
MegaCli-8.00.40-1.i386.rpm         tw_cli-linux-x86-9.4.1.tgz&lt;br /&gt;
checkraid.sh                       tw_cli-linux-x86-9.5.0.1.tgz&lt;br /&gt;
cli_freebsd_10.2.zip               tw_cli-linux-x86-9.5.1.1.tgz&lt;br /&gt;
driver-freebsd_6x-9.4.1.3.tgz      tw_cli-linux-x86_64-9.5.3.tgz&lt;br /&gt;
new&lt;br /&gt;
backup2 /d4/build/3ware#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So in the case of linux on 64bit, upload &amp;lt;tt&amp;gt;tw_cli-linux-x86_64-9.5.3.tgz&amp;lt;/tt&amp;gt; to their server and unpack in &amp;lt;tt&amp;gt;/usr/lcoal/sbin&amp;lt;/tt&amp;gt; then run &amp;lt;tt&amp;gt;checkraid.sh&amp;lt;/tt&amp;gt; once to confirm it&#039;s working. If not, edit it to reflect the correct controller #. For exanple, run &amp;lt;tt&amp;gt;tw_cli info&amp;lt;/tt&amp;gt; which will give you output like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[root@backup1 ~]# tw_cli  info&lt;br /&gt;
&lt;br /&gt;
Ctl   Model        (V)Ports  Drives   Units   NotOpt  RRate   VRate  BBU&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
c0    9650SE-8LPML 8         6        1       0       5       1      -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, edit &amp;lt;tt&amp;gt;checkraid.sh&amp;lt;/tt&amp;gt; so all instances say &amp;lt;tt&amp;gt;c0&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;c4&amp;lt;/tt&amp;gt;, for example.&lt;br /&gt;
&lt;br /&gt;
You may need to create &amp;lt;tt&amp;gt;/usr/local/sbin&amp;lt;/tt&amp;gt; on some OS&#039;s&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to add to /etc/resolv.conf:&lt;br /&gt;
 nameserver 69.55.225.225&lt;br /&gt;
 nameserver 69.55.230.3&lt;br /&gt;
&lt;br /&gt;
= Post install =&lt;br /&gt;
&lt;br /&gt;
* update the system record in mgmt to reflect the correct asset tag, ATS port, cabinet and newly-assigned IP. You can keep the notes or not, but at least keep the disk partition and OS note.&lt;br /&gt;
* update [[Cabinetmap]] with location of server, also label switch port and ATS port&lt;br /&gt;
* reboot the server and in the process of posting, power down, then power up the port using ATS controls to confirm the server is assigned to the right ATS port.&lt;br /&gt;
* make sure billing is all set&lt;br /&gt;
* send welcome email (use &amp;quot;colo welcome&amp;quot; from big pastes page).&lt;br /&gt;
* mark KVM as unused in KVM notes screen (A0P4)&lt;br /&gt;
* add server colo (and hostname if multiple servers) to description field on cisco port:&lt;br /&gt;
Go to the serial console for the switch they&#039;re connected to (refer to cabinet map as to which switch is in that cabinet):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
switch-p26&amp;gt;en&lt;br /&gt;
Password:&lt;br /&gt;
switch-p26#conf t&lt;br /&gt;
Enter configuration commands, one per line.  End with CNTL/Z.&lt;br /&gt;
switch-p26(config)#int fa0/11&lt;br /&gt;
switch-p26(config-if)#des col02171&lt;br /&gt;
switch-p26(config-if)#en&lt;br /&gt;
switch-p26#wr me&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* put a note to add a colo label to the server (or ask DC staff to do it- front and back). Also label hostname if cust has mult servers at DC&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Colo_Server_Setup&amp;diff=446</id>
		<title>Colo Server Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Colo_Server_Setup&amp;diff=446"/>
		<updated>2012-12-10T03:22:08Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Post install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BIOS =&lt;br /&gt;
You will want to adjust the following settings (where supported):&lt;br /&gt;
&lt;br /&gt;
* set the date and time to GMT&lt;br /&gt;
* disable quiet boot&lt;br /&gt;
* set the resume on power loss option to &#039;&#039;last state&#039;&#039; (this ensures that if the DC loses power, the server will turn on when power is restored, and more importantly the same will happen when the ATS port is power cycled).&lt;br /&gt;
* make sure USB is not disabled (to allow KVM ISO mount/boot)&lt;br /&gt;
* optionally, disable ROM option for NICs so they don&#039;t waste time trying to pxe boot&lt;br /&gt;
* disable booting to network &lt;br /&gt;
* adjust the boot order to boot first to HD/RAID. Note: if you&#039;re booting to KVM ISO you will have to reboot after the ISO is mounted before you see the Belkin device show up as a bootable device (which you can then move up in the boot order)&lt;br /&gt;
&lt;br /&gt;
= Install the OS =&lt;br /&gt;
&lt;br /&gt;
Refer to [[IPKVM]] for details on how to use it to do the install.&lt;br /&gt;
&lt;br /&gt;
RAID setup (if equipped)&lt;br /&gt;
After you exit the BIOS screen you will see the RAID (3ware) BIOS screen. To enter the configuration press Alt-3.&lt;br /&gt;
There you will be able to create a new mirror from the drives provided. To do this, move the cursor to each drive and hit the spacebar to select each drive (should be *&#039;d after selecting) then tab down to the menu at the bottom to Create Array. It should be a RAID1 (mirror) with write cache disabled (unless there is a backup battery). Use default options for all other settings. No need to give it a name. When done setting up the options, press F8 to save and exit.&lt;br /&gt;
&lt;br /&gt;
Do a minimal install of whatever OS the customer has selected. Don&#039;t install packages beyond the basics (i.e. openssh)&lt;br /&gt;
&lt;br /&gt;
It&#039;ll be a crapshoot which ethernet device (if there are multiple) is the active one. You basically have to guess and assign an IP to one and immediately after configuring it go ping it. If it&#039;s pinging, you guessed right. If not, you can either go back and give the IP to the other nic (this may not work since the other nic may still have the same IP) or you can ask the DC to swap the cat5 cable to the other port.&lt;br /&gt;
&lt;br /&gt;
When requested to setup a new user, choose &#039;user&#039;.&lt;br /&gt;
All passwords for user/root are newrootNNNN where the NNNN is the sig. digits from the CID. So if the new CID is col001234 the password is: newroot1234&lt;br /&gt;
&lt;br /&gt;
When setting up Ubu, make sure to set the first (or boot partition) bootable (set bootable flag).&lt;br /&gt;
&lt;br /&gt;
If the customer has not requested that you add more than 1 IP initially (with a valid reason) then just add the 1 IP (or the number they requested if applicable.)&lt;br /&gt;
&lt;br /&gt;
FreeBSD systems will require you to complete the OS load over ftp since the OS won&#039;t recognize the IPKVM&#039;s ISO as a CD drive (this despite the fact that it clearly booted to it initially). This is why we use &amp;quot;netboot&amp;quot; ISOs.&lt;br /&gt;
&lt;br /&gt;
After the OS is installed, login and install the proper RAID checking script, if applicable. In most cases it&#039;s a 3ware card. The correct file will depend on the distribution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
backup2 /d4/build/3ware# ls&lt;br /&gt;
9.5.0.1-freebsd64-9690-Upgrade.zip t&lt;br /&gt;
9.5.0.1-linux32-9690-Upgrade.zip   tw_cli-freebsd-800x-32_64.tgz&lt;br /&gt;
Lib_Utils-1.00-08.noarch.rpm       tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
MegaCli-8.00.40-1.i386.rpm         tw_cli-linux-x86-9.4.1.tgz&lt;br /&gt;
checkraid.sh                       tw_cli-linux-x86-9.5.0.1.tgz&lt;br /&gt;
cli_freebsd_10.2.zip               tw_cli-linux-x86-9.5.1.1.tgz&lt;br /&gt;
driver-freebsd_6x-9.4.1.3.tgz      tw_cli-linux-x86_64-9.5.3.tgz&lt;br /&gt;
new&lt;br /&gt;
backup2 /d4/build/3ware#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So in the case of linux on 64bit, upload &amp;lt;tt&amp;gt;tw_cli-linux-x86_64-9.5.3.tgz&amp;lt;/tt&amp;gt; to their server and unpack in &amp;lt;tt&amp;gt;/usr/lcoal/sbin&amp;lt;/tt&amp;gt; then run &amp;lt;tt&amp;gt;checkraid.sh&amp;lt;/tt&amp;gt; once to confirm it&#039;s working. If not, edit it to reflect the correct controller #. For exanple, run &amp;lt;tt&amp;gt;tw_cli info&amp;lt;/tt&amp;gt; which will give you output like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[root@backup1 ~]# tw_cli  info&lt;br /&gt;
&lt;br /&gt;
Ctl   Model        (V)Ports  Drives   Units   NotOpt  RRate   VRate  BBU&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
c0    9650SE-8LPML 8         6        1       0       5       1      -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, edit &amp;lt;tt&amp;gt;checkraid.sh&amp;lt;/tt&amp;gt; so all instances say &amp;lt;tt&amp;gt;c0&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;c4&amp;lt;/tt&amp;gt;, for example.&lt;br /&gt;
&lt;br /&gt;
You may need to create &amp;lt;tt&amp;gt;/usr/local/sbin&amp;lt;/tt&amp;gt; on some OS&#039;s&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to add to /etc/resolv.conf:&lt;br /&gt;
 nameserver 69.55.225.225&lt;br /&gt;
 nameserver 69.55.230.3&lt;br /&gt;
&lt;br /&gt;
= Post install =&lt;br /&gt;
&lt;br /&gt;
* update the system record in mgmt to reflect the ATS port and cabinet&lt;br /&gt;
* update [[Cabinetmap]] with location of server, also label switch port and ATS port&lt;br /&gt;
* reboot the server and in the process of posting, power down, then power up the port using ATS controls to confirm the server is assigned to the right ATS port.&lt;br /&gt;
* make sure billing is all set&lt;br /&gt;
* send welcome email (use &amp;quot;colo welcome&amp;quot; from big pastes page).&lt;br /&gt;
* mark KVM as unused in KVM notes screen (A0P4)&lt;br /&gt;
* add server colo (and hostname if multiple servers) to description field on cisco port:&lt;br /&gt;
Go to the serial console for the switch they&#039;re connected to (refer to cabinet map as to which switch is in that cabinet):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
switch-p26&amp;gt;en&lt;br /&gt;
Password:&lt;br /&gt;
switch-p26#conf t&lt;br /&gt;
Enter configuration commands, one per line.  End with CNTL/Z.&lt;br /&gt;
switch-p26(config)#int fa0/11&lt;br /&gt;
switch-p26(config-if)#des col02171&lt;br /&gt;
switch-p26(config-if)#en&lt;br /&gt;
switch-p26#wr me&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* put a note to add a colo label to the server (or ask DC staff to do it- front and back). Also label hostname if cust has mult servers at DC&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
	<entry>
		<id>https://wiki.jcihosting.com/index.php?title=Colo_Server_Setup&amp;diff=445</id>
		<title>Colo Server Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.jcihosting.com/index.php?title=Colo_Server_Setup&amp;diff=445"/>
		<updated>2012-12-10T01:18:39Z</updated>

		<summary type="html">&lt;p&gt;76.88.21.129: /* Install the OS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BIOS =&lt;br /&gt;
You will want to adjust the following settings (where supported):&lt;br /&gt;
&lt;br /&gt;
* set the date and time to GMT&lt;br /&gt;
* disable quiet boot&lt;br /&gt;
* set the resume on power loss option to &#039;&#039;last state&#039;&#039; (this ensures that if the DC loses power, the server will turn on when power is restored, and more importantly the same will happen when the ATS port is power cycled).&lt;br /&gt;
* make sure USB is not disabled (to allow KVM ISO mount/boot)&lt;br /&gt;
* optionally, disable ROM option for NICs so they don&#039;t waste time trying to pxe boot&lt;br /&gt;
* disable booting to network &lt;br /&gt;
* adjust the boot order to boot first to HD/RAID. Note: if you&#039;re booting to KVM ISO you will have to reboot after the ISO is mounted before you see the Belkin device show up as a bootable device (which you can then move up in the boot order)&lt;br /&gt;
&lt;br /&gt;
= Install the OS =&lt;br /&gt;
&lt;br /&gt;
Refer to [[IPKVM]] for details on how to use it to do the install.&lt;br /&gt;
&lt;br /&gt;
RAID setup (if equipped)&lt;br /&gt;
After you exit the BIOS screen you will see the RAID (3ware) BIOS screen. To enter the configuration press Alt-3.&lt;br /&gt;
There you will be able to create a new mirror from the drives provided. To do this, move the cursor to each drive and hit the spacebar to select each drive (should be *&#039;d after selecting) then tab down to the menu at the bottom to Create Array. It should be a RAID1 (mirror) with write cache disabled (unless there is a backup battery). Use default options for all other settings. No need to give it a name. When done setting up the options, press F8 to save and exit.&lt;br /&gt;
&lt;br /&gt;
Do a minimal install of whatever OS the customer has selected. Don&#039;t install packages beyond the basics (i.e. openssh)&lt;br /&gt;
&lt;br /&gt;
It&#039;ll be a crapshoot which ethernet device (if there are multiple) is the active one. You basically have to guess and assign an IP to one and immediately after configuring it go ping it. If it&#039;s pinging, you guessed right. If not, you can either go back and give the IP to the other nic (this may not work since the other nic may still have the same IP) or you can ask the DC to swap the cat5 cable to the other port.&lt;br /&gt;
&lt;br /&gt;
When requested to setup a new user, choose &#039;user&#039;.&lt;br /&gt;
All passwords for user/root are newrootNNNN where the NNNN is the sig. digits from the CID. So if the new CID is col001234 the password is: newroot1234&lt;br /&gt;
&lt;br /&gt;
When setting up Ubu, make sure to set the first (or boot partition) bootable (set bootable flag).&lt;br /&gt;
&lt;br /&gt;
If the customer has not requested that you add more than 1 IP initially (with a valid reason) then just add the 1 IP (or the number they requested if applicable.)&lt;br /&gt;
&lt;br /&gt;
FreeBSD systems will require you to complete the OS load over ftp since the OS won&#039;t recognize the IPKVM&#039;s ISO as a CD drive (this despite the fact that it clearly booted to it initially). This is why we use &amp;quot;netboot&amp;quot; ISOs.&lt;br /&gt;
&lt;br /&gt;
After the OS is installed, login and install the proper RAID checking script, if applicable. In most cases it&#039;s a 3ware card. The correct file will depend on the distribution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
backup2 /d4/build/3ware# ls&lt;br /&gt;
9.5.0.1-freebsd64-9690-Upgrade.zip t&lt;br /&gt;
9.5.0.1-linux32-9690-Upgrade.zip   tw_cli-freebsd-800x-32_64.tgz&lt;br /&gt;
Lib_Utils-1.00-08.noarch.rpm       tw_cli-freebsd-x86_64-9.5.0.1.tgz&lt;br /&gt;
MegaCli-8.00.40-1.i386.rpm         tw_cli-linux-x86-9.4.1.tgz&lt;br /&gt;
checkraid.sh                       tw_cli-linux-x86-9.5.0.1.tgz&lt;br /&gt;
cli_freebsd_10.2.zip               tw_cli-linux-x86-9.5.1.1.tgz&lt;br /&gt;
driver-freebsd_6x-9.4.1.3.tgz      tw_cli-linux-x86_64-9.5.3.tgz&lt;br /&gt;
new&lt;br /&gt;
backup2 /d4/build/3ware#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So in the case of linux on 64bit, upload &amp;lt;tt&amp;gt;tw_cli-linux-x86_64-9.5.3.tgz&amp;lt;/tt&amp;gt; to their server and unpack in &amp;lt;tt&amp;gt;/usr/lcoal/sbin&amp;lt;/tt&amp;gt; then run &amp;lt;tt&amp;gt;checkraid.sh&amp;lt;/tt&amp;gt; once to confirm it&#039;s working. If not, edit it to reflect the correct controller #. For exanple, run &amp;lt;tt&amp;gt;tw_cli info&amp;lt;/tt&amp;gt; which will give you output like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[root@backup1 ~]# tw_cli  info&lt;br /&gt;
&lt;br /&gt;
Ctl   Model        (V)Ports  Drives   Units   NotOpt  RRate   VRate  BBU&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
c0    9650SE-8LPML 8         6        1       0       5       1      -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, edit &amp;lt;tt&amp;gt;checkraid.sh&amp;lt;/tt&amp;gt; so all instances say &amp;lt;tt&amp;gt;c0&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;c4&amp;lt;/tt&amp;gt;, for example.&lt;br /&gt;
&lt;br /&gt;
You may need to create &amp;lt;tt&amp;gt;/usr/local/sbin&amp;lt;/tt&amp;gt; on some OS&#039;s&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to add to /etc/resolv.conf:&lt;br /&gt;
 nameserver 69.55.225.225&lt;br /&gt;
 nameserver 69.55.230.3&lt;br /&gt;
&lt;br /&gt;
= Post install =&lt;br /&gt;
&lt;br /&gt;
* update the system record in mgmt to reflect the ATS port and cabinet&lt;br /&gt;
* update [[Cabinetmap]] with location of server, also label switch port and ATS port&lt;br /&gt;
* reboot the server and in the process of posting, power down, then power up the port using ATS controls to confirm the server is assigned to the right ATS port.&lt;br /&gt;
* make sure billing is all set&lt;br /&gt;
* send welcome email (use &amp;quot;colo welcome&amp;quot; from big pastes page).&lt;br /&gt;
* mark KVM as unused in KVM notes screen (A0P4)&lt;br /&gt;
* add server colo (and hostname if multiple servers) to description field on cisco port:&lt;br /&gt;
Go to the serial console for the switch they&#039;re connected to (refer to cabinet map as to which switch is in that cabinet):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* put a note to add a colo label to the server (or ask DC staff to do it- front and back). Also label hostname if cust has mult servers at DC&lt;/div&gt;</summary>
		<author><name>76.88.21.129</name></author>
	</entry>
</feed>